#include <bits/stdc++.h>
using namespace std;
struct Node {
int idx, val;
Node(int i = 0, int v = 0) {
idx = i, val = v;
}
};
const int MS = 1e5 + 2;
int pred[MS], succ[MS];//存储前驱、后继的索引
Node li[MS];//list
int pos = 2;
const int head = 0;
const int tail = MS - 1;
void ins(int x, int y) {//insert
int i = succ[head];
while (i != tail && li[i].val != x) i = succ[i];
li[pos].idx = pos, li[pos].val = y;
pred[pos] = i;
succ[pos] = succ[i];
pred[succ[i]] = pos;
succ[i] = pos;
pos++;
}
void del(int x) {//delete
int i = succ[head];
while (i != tail && li[i].val != x) i = succ[i];
if (i == tail) return;
succ[pred[i]] = succ[i];
pred[succ[i]] = pred[i];
}
void print(int x) {
int i = succ[head];
while (i != tail && li[i].val != x) i = succ[i];
printf("%d\n", li[succ[i]].val);
}
int N;
int main() {
li[head].idx = head, li[head].val = 0;
pred[head] = -1, succ[head] = 1;
li[1].idx = 1, li[1].val = 1;
pred[1] = head, succ[1] = tail;
li[tail].idx = tail, li[tail].val = 0;
pred[tail] = 1, succ[tail] = -1;
scanf("%d", &N);
while (N--) {
int cmd, x, y;
scanf("%d", &cmd);
switch (cmd) {
case 1:
scanf("%d%d", &x, &y);
ins(x, y);
break;
case 2:
scanf("%d", &x);
print(x);
break;
case 3:
scanf("%d", &x);
del(x);
break;
}
/*
printf("li: \n");
for (int i = succ[head]; i != tail; i = succ[i])
printf("%d ", li[i].val);
printf("\n");
*/
}
return 0;
}