#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int trie[3100001][2];
int size[100001];
int num[100001];
int tot=0;
int n;
void insert(int val)
{
int u=0;
for(int i=(1<<30); i>=1; i>>=1)
{
int a=bool(val&i);
size[u]++;
if(trie[u][a]==0)
{
trie[u][a]=++tot;
}
u=trie[u][a];
}
num[u]=val;
size[u]++;
}
void remove(int val)
{
int u=0;
for(int i=(1<<30); i>=1; i>>=1)
{
int a=bool(val&i);
size[u]--;
u=trie[u][a];
}
num[u]=0;
size[u]--;
}
int rank(int val)
{
int u=0;
int cnt=0;
for(int i=(1<<30); i>=1; i>>=1)
{
int a=bool(val&i);
if(size[u]==0)
{
return -1;
}
if(a==1&&trie[u][0]!=0)
{
cnt+=size[trie[u][0]];
}
u=trie[u][a];
}
return cnt+1;
}
int find(int k)
{
int u=0;
int cnt=0;
for(int i=(1<<30);i>=1;i>>=1)
{
if(trie[u][0]!=0&&(k<=size[trie[u][0]]+cnt||trie[u][1]==0))
{
u=trie[u][0];
}
else
{
cnt+=size[trie[u][0]];
u=trie[u][1];
}
}
return num[u];
}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
int op,x;
scanf("%d%d",&op,&x);
if(op==1)
{
insert(x);
}
else if(op==2)
{
remove(x);
}
else if(op==3)
{
int cur=rank(x);
if(cur!=-1)
{
printf("%d\n",cur);
}
}
else if(op==4)
{
printf("%d\n",find(x));
}
else if(op==5)
{
insert(x);
int cur=rank(x)-1;
if(cur!=-1&&cur>=1)
{
printf("%d\n",find(cur));
}
remove(x);
}
else if(op==6)
{
insert(x);
int cur=rank(x)+1;
if(cur!=-1&&cur<=size[0])
{
printf("%d\n",find(cur));
}
remove(x);
}
}
return 0;
}