#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//using namespace __gnu_pbds;
using namespace std;
using ll=long long;
//typedef tree<int,null_type,less_equal<int>,rb_tree_tag, tree_order_statistics_node_update> ordered_set;
#define mem(a,x) memset(a,x,sizeof(a))
#define fast(s) s.reserve(2000); s.max_load_factor(0.5);
#define F first
#define S second
#define pii pair<int,int>
#define iii tuple<int,int,int>
#define all(p) p.begin(), p.end()
template<typename T> bool maximum(T &A, const T &B) {return A<B? A=B, true: false;}
template<typename T> bool minimum(T &A, const T &B) {return A>B? A=B, true: false;}
template<typename T> T gcd(T t) {return t;}
template<typename T, typename... Args> T gcd(T t, Args... args) {return __gcd(t,args...);};
void print(bool condition=1) {cout<<(condition? "YES\n": "NO\n");}
const int mod=1e9+7;
const int INF=1e9;
const int N=2e5+5, LOG=30;
int n, q, numQuery, res[N], z[N], h[N], cnt[N], a[N], in[N], out[N], Time;
vector<int> e[N];
vector<iii> query[N];
void file()
{
#define task "codeforces"
if(fopen(task".inp","r"))
{
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
struct Trie
{
int mn[N*LOG], child[N*LOG][2];
int root, idx;
int new_node()
{
++idx;
mn[idx]=INF;
child[idx][0]=child[idx][1]=0;
return idx;
}
void reset()
{
idx=0;
root=new_node();
}
void add(int x, int y)
{
int p=root;
for(int i=LOG; i>=0; --i)
{
int c=x>>i&1;
if(!child[p][c]) child[p][c]=new_node();
p=child[p][c];
minimum(mn[p],y);
}
}
int getMax(int x, int y)
{
int ans=0, p=root;
for(int i=LOG; i>=0; --i)
{
int c=x>>i&1;
if(child[p][c^1] && mn[child[p][c^1]]<=y)
{
p=child[p][c^1];
ans|=(1<<i);
}
else if(child[p][c] && mn[child[p][c]]<=y)
p=child[p][c];
else
return ans;
}
return ans;
}
} T;
void dfs_init(int u)
{
++Time;
in[u]=Time;
a[Time]=u;
cnt[u]=1;
for(int v: e[u])
{
dfs_init(v);
cnt[u]+=cnt[v];
}
out[u]=Time;
}
void DFS(int u)
{
int nxt=0;
for(int v: e[u])
if(cnt[v]>cnt[nxt]) nxt=v;
for(int v: e[u])
{
if(v==nxt) continue;
DFS(v);
T.reset();
}
if(nxt) DFS(nxt);
for(int v: e[u])
{
if(v==nxt) continue;
for(int k=in[v]; k<=out[v]; ++k)
T.add(h[a[k]],z[a[k]]);
}
T.add(h[u],z[u]);
for(auto &[v,k,id]: query[u])
res[id]=T.getMax(h[v],k);
}
void Solve()
{
cin>>q;
n=1;
for(int i=1; i<=q; ++i)
{
string type;
int x, y;
cin>>type>>x>>y;
if(type=="Add")
{
++n;
z[n]=i;
h[n]=h[x]^y;
e[x].push_back(n);
}
else query[y].push_back({x,i,++numQuery});
}
dfs_init(1);
T.reset();
DFS(1);
for(int i=1; i<=numQuery; ++i)
cout<<res[i]<<"\n";
}
signed main()
{
file();
Solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Ci8vI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgoKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbGw9bG9uZyBsb25nOwovL3R5cGVkZWYgdHJlZTxpbnQsbnVsbF90eXBlLGxlc3NfZXF1YWw8aW50PixyYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPiBvcmRlcmVkX3NldDsKI2RlZmluZSBtZW0oYSx4KSAgICAgICBtZW1zZXQoYSx4LHNpemVvZihhKSkKI2RlZmluZSBmYXN0KHMpICAgICAgICBzLnJlc2VydmUoMjAwMCk7IHMubWF4X2xvYWRfZmFjdG9yKDAuNSk7CiNkZWZpbmUgRiAgICAgICAgICAgICAgZmlyc3QKI2RlZmluZSBTICAgICAgICAgICAgICBzZWNvbmQKI2RlZmluZSBwaWkgICAgICAgICAgICBwYWlyPGludCxpbnQ+CiNkZWZpbmUgaWlpICAgICAgICAgICAgdHVwbGU8aW50LGludCxpbnQ+CiNkZWZpbmUgYWxsKHApICAgICAgICAgcC5iZWdpbigpLCBwLmVuZCgpCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbWF4aW11bShUICZBLCBjb25zdCBUICZCKSB7cmV0dXJuIEE8Qj8gQT1CLCB0cnVlOiBmYWxzZTt9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbWluaW11bShUICZBLCBjb25zdCBUICZCKSB7cmV0dXJuIEE+Qj8gQT1CLCB0cnVlOiBmYWxzZTt9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgZ2NkKFQgdCkge3JldHVybiB0O30KdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4gVCBnY2QoVCB0LCBBcmdzLi4uIGFyZ3MpIHtyZXR1cm4gX19nY2QodCxhcmdzLi4uKTt9Owp2b2lkIHByaW50KGJvb2wgY29uZGl0aW9uPTEpIHtjb3V0PDwoY29uZGl0aW9uPyAiWUVTXG4iOiAiTk9cbiIpO30KY29uc3QgaW50IG1vZD0xZTkrNzsKY29uc3QgaW50IElORj0xZTk7CmNvbnN0IGludCBOPTJlNSs1LCBMT0c9MzA7CmludCBuLCBxLCBudW1RdWVyeSwgcmVzW05dLCB6W05dLCBoW05dLCBjbnRbTl0sIGFbTl0sIGluW05dLCBvdXRbTl0sIFRpbWU7CnZlY3RvcjxpbnQ+IGVbTl07CnZlY3RvcjxpaWk+IHF1ZXJ5W05dOwp2b2lkIGZpbGUoKQp7CiAgICAjZGVmaW5lIHRhc2sgImNvZGVmb3JjZXMiCiAgICBpZihmb3Blbih0YXNrIi5pbnAiLCJyIikpCiAgICB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCJyIixzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgfQogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7Cn0Kc3RydWN0IFRyaWUKewogICAgaW50IG1uW04qTE9HXSwgY2hpbGRbTipMT0ddWzJdOwogICAgaW50IHJvb3QsIGlkeDsKICAgIGludCBuZXdfbm9kZSgpCiAgICB7CiAgICAgICAgKytpZHg7CiAgICAgICAgbW5baWR4XT1JTkY7CiAgICAgICAgY2hpbGRbaWR4XVswXT1jaGlsZFtpZHhdWzFdPTA7CiAgICAgICAgcmV0dXJuIGlkeDsKICAgIH0KICAgIHZvaWQgcmVzZXQoKQogICAgewogICAgICAgIGlkeD0wOwogICAgICAgIHJvb3Q9bmV3X25vZGUoKTsKICAgIH0KICAgIHZvaWQgYWRkKGludCB4LCBpbnQgeSkKICAgIHsKICAgICAgICBpbnQgcD1yb290OwogICAgICAgIGZvcihpbnQgaT1MT0c7IGk+PTA7IC0taSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBjPXg+PmkmMTsKICAgICAgICAgICAgaWYoIWNoaWxkW3BdW2NdKSBjaGlsZFtwXVtjXT1uZXdfbm9kZSgpOwogICAgICAgICAgICBwPWNoaWxkW3BdW2NdOwogICAgICAgICAgICBtaW5pbXVtKG1uW3BdLHkpOwogICAgICAgIH0KICAgIH0KICAgIGludCBnZXRNYXgoaW50IHgsIGludCB5KQogICAgewogICAgICAgIGludCBhbnM9MCwgcD1yb290OwogICAgICAgIGZvcihpbnQgaT1MT0c7IGk+PTA7IC0taSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBjPXg+PmkmMTsKICAgICAgICAgICAgaWYoY2hpbGRbcF1bY14xXSAmJiBtbltjaGlsZFtwXVtjXjFdXTw9eSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcD1jaGlsZFtwXVtjXjFdOwogICAgICAgICAgICAgICAgYW5zfD0oMTw8aSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihjaGlsZFtwXVtjXSAmJiBtbltjaGlsZFtwXVtjXV08PXkpCiAgICAgICAgICAgICAgICBwPWNoaWxkW3BdW2NdOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gYW5zOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYW5zOwogICAgfQp9IFQ7CnZvaWQgZGZzX2luaXQoaW50IHUpCnsKICAgICsrVGltZTsKICAgIGluW3VdPVRpbWU7CiAgICBhW1RpbWVdPXU7CiAgICBjbnRbdV09MTsKICAgIGZvcihpbnQgdjogZVt1XSkKICAgIHsKICAgICAgICBkZnNfaW5pdCh2KTsKICAgICAgICBjbnRbdV0rPWNudFt2XTsKICAgIH0KICAgIG91dFt1XT1UaW1lOwp9CnZvaWQgREZTKGludCB1KQp7CiAgICBpbnQgbnh0PTA7CiAgICBmb3IoaW50IHY6IGVbdV0pCiAgICAgICAgaWYoY250W3ZdPmNudFtueHRdKSBueHQ9djsKICAgIGZvcihpbnQgdjogZVt1XSkKICAgIHsKICAgICAgICBpZih2PT1ueHQpIGNvbnRpbnVlOwogICAgICAgIERGUyh2KTsKICAgICAgICBULnJlc2V0KCk7CiAgICB9CiAgICBpZihueHQpIERGUyhueHQpOwogICAgZm9yKGludCB2OiBlW3VdKQogICAgewogICAgICAgIGlmKHY9PW54dCkgY29udGludWU7CiAgICAgICAgZm9yKGludCBrPWluW3ZdOyBrPD1vdXRbdl07ICsraykKICAgICAgICAgICAgVC5hZGQoaFthW2tdXSx6W2Fba11dKTsKICAgIH0KICAgIFQuYWRkKGhbdV0selt1XSk7CiAgICBmb3IoYXV0byAmW3YsayxpZF06IHF1ZXJ5W3VdKQogICAgICAgIHJlc1tpZF09VC5nZXRNYXgoaFt2XSxrKTsKfQp2b2lkIFNvbHZlKCkKewogICAgY2luPj5xOwogICAgbj0xOwogICAgZm9yKGludCBpPTE7IGk8PXE7ICsraSkKICAgIHsKICAgICAgICBzdHJpbmcgdHlwZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBjaW4+PnR5cGU+Png+Pnk7CiAgICAgICAgaWYodHlwZT09IkFkZCIpCiAgICAgICAgewogICAgICAgICAgICArK247CiAgICAgICAgICAgIHpbbl09aTsKICAgICAgICAgICAgaFtuXT1oW3hdXnk7CiAgICAgICAgICAgIGVbeF0ucHVzaF9iYWNrKG4pOwogICAgICAgIH0KICAgICAgICBlbHNlIHF1ZXJ5W3ldLnB1c2hfYmFjayh7eCxpLCsrbnVtUXVlcnl9KTsKICAgIH0KICAgIGRmc19pbml0KDEpOwogICAgVC5yZXNldCgpOwogICAgREZTKDEpOwogICAgZm9yKGludCBpPTE7IGk8PW51bVF1ZXJ5OyArK2kpCiAgICAgICAgY291dDw8cmVzW2ldPDwiXG4iOwp9CnNpZ25lZCBtYWluKCkKewogICAgZmlsZSgpOwogICAgU29sdmUoKTsKICAgIHJldHVybiAwOwp9