#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
struct node {
node* next;
int data;
};
int main() {
int n = 0, flag = 0, temp1 = 0, temp2 = 0,flag1 = 0;
vector<int> z;
node* first = NULL;
node* a = (node*)malloc(sizeof(node));
a->data = 1;
node* p;
node* q;
p = a;
q = p;
a->next = NULL;
first = p;
cin >> n;
for (int i = 0; i < n; i++) {
p = first;
q = p;
cin >> flag;
if (flag == 1) {
cin >> temp1 >> temp2;
while (1) {
if (p->data == temp1) {
p->next = (node*)malloc(sizeof(node));
q = p->next;
q->data = temp2;
q->next = NULL;
p = q;
break;
}
else {
p = q->next;
q = p;
}
}
}
if (flag == 2) {
cin >> temp1;
while (1) {
if (p->data == temp1) {
z.push_back(p->next->data);
flag1++;
break;
}
else {
p = q->next;
q = p;
}
}
}
if (flag == 3) {
cin >> temp1;
while (1) {
if (p->data == temp1) {
q = p->next;
p = q->next;
free(q);
break;
}
else {
p = q->next;
q = p;
}
}
}
}
for (int i = 0; i < flag; i++) {
cout << z[i]<<endl;
}
return 0;
}