#include<bits/stdc++.h>
using namespace std;
#define ii pair<int,int>
#define fir first
#define sec second
const int maxn=2e5;
vector<ii>adj[maxn+2];
int in[maxn+2],out[maxn+2],conv[maxn+2];
int pref[maxn+2];
int cnt;
struct trie{
trie *ch[2]={NULL};
set<int>st;
void insert(int val,int ke,int idx){
st.insert(in[idx]);
if(ke==-1)return;
int bit=0;
if((val>>ke)&1)bit=1;
// cout<<val<<' '<<ke<<' '<<bit<<endl;
if(!ch[bit])ch[bit]=new trie();
ch[bit]->insert(val,ke-1,idx);
}
int mx(int val,int ke,int idx){
if(ke==-1)return 0;
int bit=0;
if((val>>ke)&1)bit=1;
//cout<<val<<" "<<ke<<" "<<bit<<endl;
if(ch[bit^1]){
auto it=ch[bit^1]->st.lower_bound(in[idx]);
if(it!=ch[bit^1]->st.end() && *it<=out[idx])return (1<<ke)+ch[bit^1]->mx(val,ke-1,idx);
}
// cout<<val<<' '<<ke<<' '<<bit<<' '<<idx<<endl;
if(!ch[bit])return 0;
auto it=ch[bit]->st.lower_bound(in[idx]);
if(it!=ch[bit]->st.end() && *it<=out[idx])return ch[bit]->mx(val,ke-1,idx);
return 0;
}
};
void dfs(int cur){
in[cur]=++cnt; conv[cnt]=cur;
for(auto x : adj[cur]){
pref[x.fir]=(pref[cur]^x.sec);
dfs(x.fir);
}
out[cur]=cnt;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int qu; cin>>qu;
int n=1;
vector<array<int,3> >slv;
for(int q=1;q<=qu;q++){
string s; cin>>s;
int a,b;
cin>>a>>b;
if(s=="Add"){
n++;
adj[a].push_back({n,b});
slv.push_back({0,a,b});
}
else{
slv.push_back({1,a,b});
}
}
dfs(1);
trie apa;
apa.insert(0,29,1);
int tmp=1;
for(auto [ty,a,b] : slv){
if(ty==0){
tmp++;
// cout<<in[tmp]<<"k"<<endl;
apa.insert(pref[tmp],29,tmp);
}
else{
// cout<<in[b]<<' '<<out[b]<<" "<<pref[a]<<endl;
cout<<apa.mx(pref[a],29,b)<<endl;
}
}
}