#include<bits/stdc++.h>
using namespace std;
int idx;
struct Trieqwq
{
int lc,rc,val,fa,lf,tval;
};
bitset<25> b;
Trieqwq t[114514];
void rt()
{
t[0]=(Trieqwq){-1,-1,-1,-1,1,0};//无实际意义的根节点
}
bool isleaf(int x)//判断一个节点是否为叶子节点
{
return (t[x].lc==-1)&&(t[x].rc==-1);
}
void insert(int x)//插入操作
{
int f;
b=x;
if(b[24])
{
if(t[0].rc==-1)
{
t[++idx].val=1;
t[idx].fa=0;
t[idx].lc=-1;
t[idx].rc=-1;
t[idx].tval=1;
t[0].rc=idx;
f=idx;
if(t[0].lc==-1)t[0].lf++;
}
else f=t[0].rc;
}
else
{
if(t[0].lc==-1)
{
t[++idx].val=0;
t[idx].fa=0;
t[idx].lc=-1;
t[idx].rc=-1;
t[idx].tval=0;
t[0].lc=idx;
f=idx;
if(t[0].rc==-1)t[0].lf++;
}
else f=t[0].rc;
}
for(int i=24;i>0;i--)
{
if(b[i-1])
{
if(t[f].rc==-1)
{
t[++idx].val=1;
t[idx].fa=f;
t[idx].lc=-1;
t[idx].rc=-1;
t[idx].tval=t[f].tval*2+1;
t[f].rc=idx;
f=idx;
if(t[f].lc==-1)t[f].lf++;
}
else f=t[f].rc;
}
else
{
if(t[f].lc==-1)
{
t[++idx].val=0;
t[idx].fa=f;
t[idx].lc=-1;
t[idx].rc=-1;
t[idx].tval=t[f].tval*2;
t[f].lc=idx;
f=idx;
if(t[f].rc==-1)t[f].lf++;
}
else f=t[f].lc;
}
}
}
void erase(int x)//删除操作
{
b=x;
int nd=0;
for(int i=24;i>=0;i--)
{
if(b[i])nd=t[nd].rc;
else nd=t[nd].lc;
}
if(b[0])
{
t[t[nd].fa].rc=-1;
if(t[t[nd].fa].lc!=-1)t[t[nd].fa].lf--;
}
else
{
t[t[nd].fa].lc=-1;
if(t[t[nd].fa].rc!=-1)t[t[nd].fa].lf--;
}
int dep=0;
while(nd!=0)
{
nd=t[nd].fa;
dep++;
if(t[nd].lc==-1&&t[nd].rc==-1)
{
if(b[dep])
{
t[t[nd].fa].rc=-1;
if(t[t[nd].fa].lc!=-1)t[t[nd].fa].lf--;
}
else
{
t[t[nd].fa].lc=-1;
if(t[t[nd].fa].rc!=-1)t[t[nd].fa].lf--;
}
}
}
}
int rk(int x)//查询排名操作
{
b=x;
int nd=0,ans=0;;
for(int i=24;i>=0;i--)
{
if(b[i])
{
nd=t[nd].rc;
if(t[nd].lc!=-1)ans+=t[t[nd].lc].lf;
}
else nd=t[nd].lc;
}
return ans+1;
}
int kth(int x)//查询第x名操作
{
int nd=0;
while(!isleaf(nd))
{
if(t[nd].lc==-1||t[t[nd].lc].lf<=x)
{
if(t[nd].lc!=-1)x-=t[t[nd].lc].lf;
nd=t[nd].rc;
}
else nd=t[nd].lc;
}
return t[nd].tval;
}
int prev(int x)//前驱操作
{
b=x;
int nd=0;
for(int i=24;i>=0;i++)
{
if(b[i])nd=t[nd].rc;
else nd=t[nd].lc;
}
while(1)
{
if(t[t[nd].fa].lc!=-1&&t[t[nd].fa].lc!=nd)
{
nd=t[t[nd].fa].lc;
while(!isleaf(nd))nd=t[nd].rc;
return t[nd].tval;
}
else nd=t[nd].fa;
}
}
int next(int x)//后继操作
{
b=x;
int nd=0;
for(int i=24;i>=0;i++)
{
if(b[i])nd=t[nd].rc;
else nd=t[nd].lc;
}
while(1)
{
if(t[t[nd].fa].rc!=-1&&t[t[nd].fa].rc!=nd)
{
nd=t[t[nd].fa].rc;
while(!isleaf(nd))nd=t[nd].lc;
return t[nd].tval;
}
else nd=t[nd].fa;
}
}
int main()
{
int n;
rt();
cin>>n;
for(int i=0,opt,x;i<n;i++)
{
cin>>opt>>x;
if(opt==1)insert(x);
if(opt==2)erase(x);
if(opt==3)cout<<rk(x)<<'\n';
if(opt==4)cout<<kth(x)<<'\n';
if(opt==5)cout<<prev(x)<<'\n';
if(opt==6)cout<<next(x)<<'\n';
}
return 0;
}