#include<bits/stdc++.h>
using namespace std;
#define re register
#define maxm 100000
#define mod 100007
int cnt,root;
struct node
{
int value,size,cnt,fa,son[2];
#define ls(x) tree[x].son[0]
#define rs(x) tree[x].son[1]
#define v(x) tree[x].value
#define s(x) tree[x].size
#define f(x) tree[x].fa
#define c(x) tree[x].cnt
}tree[100010];
inline void update(int x)
{
s(x)=c(x)+s(ls(x))+s(rs(x));
}
inline bool which(int x)
{
return rs(f(x))==x;
}
void rotate(int x)
{
int f=f(x);
int g=f(f);
int w=which(x);
tree[f].son[w]=tree[x].son[w^1];
f(tree[f].son[w])=f;
tree[x].son[w^1]=f;
f(f)=x;
f(x)=g;
if(g) tree[g].son[rs(f)==f]=x;
update(f);
update(x);
return ;
}
inline void Splay(int x,int goal)
{
while(f(x)!=goal)
{
int f=f(x);
int g=f(f);
if(g!=goal) rotate((which(x)^which(f))?x:f);
rotate(x);
}
if(!goal) root=x;
return ;
}
inline void insert(int n)
{
if(!root)
{
root=++cnt;
ls(cnt)=rs(cnt)=0;
v(cnt)=n;
s(cnt)=c(cnt)=1;
f(cnt)=0;
return ;
}
int now=root,f=0;
while(1)
{
if(v(now)==n)
{
++c(now);
update(now);
Splay(now,0);
return ;
}
f=now;
now=tree[f].son[v(f)<n];
if(!now)
{
tree[f].son[v(f)<n]=++cnt;
v(cnt)=n;
ls(cnt)=rs(cnt)=0;
f(cnt)=f;
s(cnt)=c(cnt)=1;
++s(f);
Splay(cnt,0);
return ;
}
}
return ;
}
int getrank(int n)
{
int now=root,ans=1;
while(1)
{
if(n<v(now))
now=ls(now);
else
{
ans+=s(ls(now));
if(v(now)==n)
{
Splay(now,0);
return ans;
}
ans+=c(now);
now=rs(now);
}
}
return 0;
}
int getnum(int n)
{
int now=root;
while(1)
{
if(s(ls(now))>=n)
now=ls(now);
else
{
n-=s(ls(now));
if(c(now)>=n)
{
Splay(now,0);
return v(now);
}
n-=c(now);
now=rs(now);
}
}
return 0;
}
inline int bef()
{
int x=ls(root);
while(rs(x)) x=rs(x);
return x;
}
inline int aft()
{
int x=rs(root);
while(ls(x)) x=ls(x);
return x;
}
void del(int n)
{
int r=getrank(n);
int x=root;
if(c(x)>1)
{
c(x)--;
return ;
}
if(!ls(x)&&!rs(x))
{
root=0;
return ;
}
if(!ls(x))
{
root=rs(x);
f(rs(x))=0;
return ;
}
if(!rs(x))
{
root=ls(x);
f(ls(x))=0;
return ;
}
int q=bef();
int h=aft();
Splay(q,0);
Splay(h,q);
if(c(ls(h))>1)
{
--c(ls(h));
return ;
}
else
ls(h)=0;
return ;
}
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
return x*f;
}
int main()
{
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
int t=read();
while(t--)
{
int op=read(),n=read();
switch(op)
{
case 1:
insert(n);
break;
case 2:
del(n);
break;
case 3:
cout<<getrank(n)<<'\n';
break;
case 4:
cout<<getnum(n)<<'\n';
break;
case 5:
insert(n),cout<<v(bef())<<'\n',del(n);
break;
case 6:
insert(n),cout<<v(aft())<<'\n',del(n);
break;
}
}
return 0;
}