#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, tot, root[N];
struct Sgt {
int ls, rs, cnt;
char dat;
#define ls(p) t[p].ls
#define rs(p) t[p].rs
#define cnt(p) t[p].cnt
#define dat(p) t[p].dat
} t[N << 5];
void update(int p) {
cnt(p) = cnt(ls(p)) + cnt(rs(p));
}
int insert(int now, int l, int r, int delta) {
int p = ++tot; t[p] = t[now];
if (l == r) {
cnt(p) = 1, dat(p) = delta;
return p;
}
int mid = l + r >> 1;
if (cnt(ls(p)) == mid - l + 1) rs(p) = insert(rs(now), mid + 1, r, delta);
else ls(p) = insert(ls(now), l, mid, delta);
update(p);
return p;
}
char ask(int p, int l, int r, int x) {
if (l == r) return dat(p);
int mid = l + r >> 1;
if (x <= cnt(ls(p))) return ask(ls(p), l, mid, x);
else return ask(rs(p), mid + 1, r, x - cnt(ls(p)));
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n; int sum = 0;
while (n--) {
char opt, c; int x; cin >> opt;
switch (opt) {
case 'T':
cin >> c; sum++;
root[sum] = insert(root[sum - 1], 1, n, c);
break;
case 'U':
cin >> x; sum++;
root[sum] = root[sum - x - 1];
break;
case 'Q':
cin >> x;
cout << ask(root[sum], 1, n, x) << endl;
}
}
return 0;
}