#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int t,now,tot,x;
int rt[N],sz[N];
char c1,c2;
struct tree{
int ls,rs;
char ch;
}tr[N*50];
inline int read(){
int x=0,w=0; char c=0;
while(!isdigit(c)){w|=c=='-';c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return w?-x:x;
}
inline void insert(int &p,int v,int l,int r,int k,char x){
p=++tot;
tr[p]=tr[v];
if(l==r){
tr[p].ch=x;
return;
}
int mid=l+r>>1;
if(k<=mid) insert(tr[p].ls,tr[v].ls,l,mid,k,x);
else insert(tr[p].rs,tr[v].rs,mid+1,r,k,x);
}
inline char ask(int p,int l,int r,int x){
if(l==r) return tr[p].ch;
int mid=l+r>>1;
if(x<=mid) return ask(tr[p].ls,l,mid,x);
else return ask(tr[p].rs,mid+1,r,x);
}
signed main(){
t=read();
for(int i=1;i<=t;++i){
cin>>c1;
if(c1=='T'){
cin>>c2;
sz[++now]=sz[now-1]+1;
insert(rt[now],rt[now-1],1,t,sz[now],c2);
}else if(c1=='U'){
cin>>x;
rt[++now]=rt[now-x-1];
sz[now]=sz[now-x-1];
}else if(c1=='Q'){
cin>>x;
cout<<(char)ask(rt[now],1,t,x)<<"\n";
}
}
return 0;
}