#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;

class LRUCache
{
private:
    struct LRUNode                                      //使用双向链表+哈希表组合实现LRU
    {
        int key, val;
        LRUNode* pre;
        LRUNode* next;
        LRUNode(int k, int v) : key(k), val(v){
            pre = nullptr;
            next = nullptr;
        }
    };
    int capacity;
    int num = 0;
    unordered_map<int, LRUNode*> LRUHashMap;
    LRUNode* head;
    LRUNode* tail;

    void DeleteKey(LRUNode* node ,int k)
    {
        --num;
        node -> pre -> next = node -> next;
        node -> next -> pre = node -> pre;
        delete node;
        LRUHashMap.erase(k);
    }

    void InsertKey(LRUNode* node, int k)                  //每次插入都在列尾
    {
        ++num;
        node -> pre = tail -> pre;
        node -> next = tail;

        tail -> pre = node;
        node -> pre -> next = node;
        
        LRUHashMap[k] = node;
    }
public:
    LRUCache(int cap)
    {
        capacity = cap;
        head = new LRUNode(-1, -1);
        tail = new LRUNode(-1, -1);
        head -> next = tail;
        tail -> pre = head;
    }

    int get(int key)
    {
        if(!LRUHashMap.count(key))
        return -1;
        LRUNode* node1 = LRUHashMap[key];
        int val = node1 -> val;
        DeleteKey(node1, key);
        LRUNode* node2;
        node2 = new LRUNode(key, val);
        InsertKey(node2, key);
        return val;
    }

    void put(int key, int value)
    {
        if(capacity == 0)                            //容积为0时不参与put函数,防止列表越界
        return;
        if(LRUHashMap.count(key))
        {
            LRUNode* node1 = LRUHashMap[key];
            node1 -> val = value;
            return;
        }
        else if(num == capacity)
        {
            DeleteKey(head -> next, head -> next -> key);         //快要溢出时,删除列首节点
        }
        LRUNode* node2;
        node2 = new LRUNode(key, value);
        InsertKey(node2, key);
        return;
    }
};

int main() {
    int cap;
    cin >> cap;
    LRUCache MyLRUCache(cap);
    char fun;
    int key, value;
    while (cin >> fun) { 
        if(fun == 'p')
        {
            cin >> key >> value;
            MyLRUCache.put(key, value);
        }
        else if(fun == 'g')
        {
            cin >> key;
            int res = MyLRUCache.get(key);
            cout << res << endl;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")