#include<iostream>
using namespace std;
struct node{
int data;
node*next;
};
void add(node*abc,int x,node*&cba){
node*q=new node;
q->data=x;
q->next=abc->next;
abc->next=q;
if(cba->next!=NULL)cba=cba->next;
}
void add(node*abc,int x,int y,node*&cba){
node*q=new node,*p=abc;
q->data=y;
while(p->data!=x)p=p->next;
q->next=p->next;
p->next=q;
if(cba->next!=NULL)cba=cba->next;
}
int main(){
node*head=new node,*tail,*p;head->data=1;
head->next=NULL;
tail=head;
int a[100000],b,n,x,y,c=0;cin>>b;
for(int i=0;i<b;i++){
cin>>n;p=head;
if(n==1){
cin>>x>>y;
add(head,x,y,tail);
}
else if(n==2){
cin>>x;
while(p->data!=x)p=p->next;
a[c++]=p->next?p->next->data:0;
}
else{
cin>>x;
while(p->data!=x)p=p->next;
p->next=p->next->next;
}
}
for(int i=0;i<c;i++)
cout<<a[i]<<endl;
}