#include<bits/stdc++.h>
using namespace std;
long long res[100005];
struct node{
long long val;
node *next;
}*head,
*p,
*r;
void posi(long long x){
p=head;
while((p->val!=x)
&&(p->next!=NULL)){
p=p->next;
}
}
void cutin(long long x){
posi(x);
if(p->next==NULL){
p=new node,
p->next=NULL,
scanf("%lld",&p->val),
r->next=p,
r=p;
}else{
node *n=new node;
n->next=p->next;
scanf("%lld",&n->val);
p->next=n;
}
}
int find(int x){
posi(x);
if(p->next!=NULL){
return p->next->val;
}
return 0;
}
void del(long long x){
posi(x);
if(p->next!=NULL){
node *s;
s=p->next,
p->next=p->next->next;
free(s);
}
}
int main()
{
memset(res,-1,sizeof(res));
head=new node,
head->val=1,head->next=NULL,
r=head;
int n,op;
long long x;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&op);
switch (op) {
case 1:
scanf("%lld",&x);
cutin(x);
break;
case 2:
scanf("%lld",&x);
res[i]=find(x);
break;
case 3:
scanf("%lld",&x);
del(x);
break;
}
}
for(int i=0;i<n;i++){
if(res[i]==-1){
continue;
}else{
printf("%lld\n",res[i]);
}
}
return 0;
}