#include<bits/stdc++.h>
#include<cmath>
#define ll long long
#define N 100010
using namespace std;
int root[N];
struct node{
int siz,ls,rs;
char sh;
}tree[N<<5];
int q,sum=0,cnt=1;
void add(int l,int r,char x,int pre,int &p){
p=++cnt;
tree[p].ls=tree[pre].ls;
tree[p].rs=tree[pre].rs;
tree[p].sh=tree[pre].sh;
tree[p].siz=tree[pre].siz;
if(l>r) return;
if(l==r){
tree[p].sh=x;
tree[p].siz=1;
return;
}
int mid=(l+r)/2;
if(tree[tree[p].ls].siz==mid-l+1) add(mid+1,r,x,tree[pre].rs,tree[p].rs);
else add(l,mid,x,tree[pre].ls,tree[p].ls);
tree[p].siz=tree[tree[p].ls].siz+tree[tree[p].rs].siz;
}
char query(int l,int r,int x,int y){
if(l>=r){
return tree[x].sh;
}
int mid=(l+r)/2;
if(y>tree[tree[x].ls].siz) return query(mid+1,r,tree[x].rs,y-tree[tree[x].ls].siz);
else return query(l,mid,tree[x].ls,y);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>q;
while(q--){
char q1;
cin>>q1;
if(q1=='T'){
sum++;
char q2;
cin>>q2;
add(1,q,q2,root[sum-1],root[sum]);
}else if(q1=='U'){
int q2;
cin>>q2;
sum++;
root[sum]=root[sum-q2-1];
}else{
int q2;
cin>>q2;
cout<<query(1,q,root[sum],q2)<<endl;
}
}
return 0;
}