#include <iostream>
#include <list>
#include <map>
using namespace std;
class LRU {
struct node {
int key, val;
node(int k_ = 0, int v_ = 0) {
key = k_;
val = v_;
}
};
public:
int cap; // 大小
map<int, list<node>::iterator> mp;
list<node> lt;
LRU(int c_ = 0) {
cap = c_;
}
int getval(int key) {
if(mp.find(key) == mp.end()) return -1;
lt.splice(lt.begin(), lt, mp[key]);
mp[key] = lt.begin();
return mp[key]->val;
}
void setkv(int key, int val) {
if(mp.find(key) == mp.end()) {
// cout << mp.size() << " " << cap << endl;
if(mp.size() == cap) {
mp.erase(lt.back().key);
lt.pop_back();
}
lt.push_front(node(key, val));
mp[key] = lt.begin();
} else {
mp[key]->val = val;
lt.splice(lt.begin(), lt, mp[key]);
mp[key] = lt.begin();
}
}
};
int main() {
LRU L(3);
int n;
cin >> n;
int op, k, v;
while(n--) {
cin >> op;
if(op) {
cin >> k;
cout << L.getval(k) << endl;
} else {
cin >> k >> v;
L.setkv(k, v);
}
}
return 0;
}
/*
10
0 1 1
0 2 2
0 3 3
0 1 4
0 4 4
1 2
*/