#include <iostream>
using namespace std;
struct node{
int value,next;
}a[100010];
int len = 1;
int main()
{
a[1].value = 1,a[1].next = 0;
int n;
cin>>n;
for(int i = 1;i<=n;i++){
int op;
cin>>op;
if(op==1){
int x,y;
cin>>x>>y;
a[++len].value = y;
a[len].next = 0;
int ans = 0;
for(int j = 1;j<len;j++){
if(a[j].value==x){
ans = j;
break;
}
}
a[len].next = a[ans].next;
a[ans].next = len;
}else if(op==2){
int x;
cin>>x;
int ans = 0;
for(int j = 1;j<=len;j++){
if(a[j].value==x){
ans = j;
break;
}
}
cout<<a[a[ans].next].value<<endl;
}else if(op==3){
int x;
cin>>x;
int ans = 0;
for(int j = 1;j<=len;j++){
if(a[j].value==x){
ans = j;
break;
}
}
a[ans].next = a[a[ans].next].next;
}
}
return 0;
}