#include <bits/stdc++.h>
using namespace std;
#define pi pair<int,int>
#define mk make_pair
#define lt first
#define rt second
const int N=1e5+5;
int pos,root;
struct FHQ {
int l,r,v,pr,si;
FHQ() {si=1,pr=rand();}
}t[N];
inline void updata(int u) {t[u].si=t[t[u].l].si+t[t[u].r].si+1;}
pi split(int u,int key) {
if(u==0) return mk(0,0);
if(t[u].v<key) {
pi res=split(t[u].r,key);
t[u].r=res.lt;
updata(u);
return mk(u,res.rt);
}
if(t[u].v>=key) {
pi res=split(t[u].l,key);
t[u].l=res.rt;
updata(u);
return mk(res.lt,u);
}
}
int merge(int u,int v) {
if(u==0||v==0) return u+v;
if(t[u].pr>=t[v].pr) {
t[u].r=merge(t[u].r,v);
updata(u);
return u;
}
if(t[u].pr<t[v].pr) {
t[v].l=merge(u,t[v].l);
updata(v);
return v;
}
}
inline void ins(int val) {
t[++pos].v=val;
pi res=split(root,val);
int f=merge(res.lt,pos);
root=merge(f,res.rt);
}
inline void del(int val) {
pi res=split(root,val);
pi r2=split(res.rt,val+1);
int f=merge(t[r2.lt].l,t[r2.lt].r);
int fx=merge(res.lt,f);
root=merge(fx,r2.rt);
}
inline int Rank(int val) {
pi res=split(root,val);
root=merge(res.lt,res.rt);
int Rank=t[res.lt].si+1;
return Rank;
}
#define lx t[now].l
#define rx t[now].r
inline int revRank(int rank) {
int now=root;
while(now) {
if(t[lx].si+1==rank) break;
if(t[lx].si+1>=rank) now=lx;
else rank-=t[lx].si+1,now=rx;
}
return t[now].v;
}
inline int pre(int x) {
pi res=split(root,x);
int now=res.lt;
while(rx) now=rx;
int Pre=t[now].v;
root=merge(res.lt,res.rt);
return Pre;
}
inline int nxt(int x) {
pi res=split(root,x);
int now=res.rt;
while(lx) now=lx;
int Nxt=t[now].v;
root=merge(res.lt,res.rt);
return Nxt;
}
signed main() {
t[0].si=0;
int Q;
cin>>Q;
while(Q--) {
int opt,x;
cin>>opt>>x;
if(opt==1) {
ins(x);
} else if(opt==2) {
del(x);
} else if(opt==3) {
cout<<Rank(x)<<endl;
} else if(opt==4) {
cout<<revRank(x)<<endl;
} else if(opt==5) {
cout<<pre(x)<<endl;
} else if(opt==6) {
cout<<nxt(x)<<endl;
}
}
return 0;
}