const int maxn=1e5+5;
struct Trie{
int val[maxn*31],tree[maxn*31][2],L,root;
int newnode(){
mem(tree[L],-1);
return L++;
}
void init(){
L=0;
root=newnode();
}
void update(int x,int key){
int now=root;
for(int i=31;i>=0;i--){
int p=(x>>i)&1;
if(tree[now][p]==-1) tree[now][p]=newnode();
now=tree[now][p];
val[now]+=key;
}
}
int query(int x){
int res=0;
int now=root;
for(int i=31;i>=0;i--){
int p=(x>>i)&1;
if(val[tree[now][!p]]){
now=tree[now][!p];
res|=(1<<i);
}else{
now=tree[now][p];
}
}
return res;
}
}trie;
int main(){
trie.init();
}