#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
int n;
typedef pair<int,int> p2;
typedef pair<pair<int,int>,int> p3;
struct node {
int t[2],v,h,c,s;
void init(int val) {
v=val,t[0]=t[1]=-1,c=s=1,h=rand();
}
};
struct treap {
node num[100010];
int root=-1,cnt;
void upl(int p) {
num[p].s=num[num[p].t[0]].s+num[num[p].t[1]].s+num[p].c;
}
int newnode(int v) {
num[++cnt].init(v);
return cnt;
}
p2 splv(int p,int k) {
if(p==-1)
return make_pair(-1,-1);
if(num[p].v<=k) {
p2 ret=splv(num[p].t[1],k);
num[p].t[1]=ret.fi;
upl(p);
return make_pair(p,ret.se);
} else {
p2 ret=splv(num[p].t[0],k);
num[p].t[0]=ret.se;
upl(p);
return make_pair(ret.fi,p);
}
}
p3 splr(int p,int r) {
if(p==-1)
return make_pair(make_pair(-1,-1),-1);
if(r<=num[num[p].t[0]].s) {
p3 ret=splr(num[p].t[0],r);
num[p].t[0]=ret.fi.se;
upl(p);
return make_pair(make_pair(ret.fi.fi,p),ret.se);
}
if(r<=num[num[p].t[0]].s+num[p].c) {
p3 ret=make_pair(make_pair(num[p].t[0],num[p].t[1]),p);
num[p].t[0]=num[p].t[1]=-1;
return ret;
} else {
p3 ret=splr(num[p].t[1],r);
num[p].t[1]=ret.fi.fi;
upl(p);
return make_pair(make_pair(p,ret.fi.se),ret.se);
}
}
int mer(int l,int r) {
if(l==-1)
return r;
if(r==-1)
return l;
if(num[l].h<=num[r].h) {
num[l].t[1]=mer(num[l].t[1],r);
upl(l);
return l;
}
if(num[l].h>num[r].h) {
num[r].t[0]=mer(l,num[l].t[0]);
upl(r);
return r;
}
}
void ins(int v) {
p2 r=splv(root,v);
p2 l=splv(r.fi,v-1);
if(l.se==-1) {
l.se=newnode(v);
} else {
num[l.se].c++;
upl(l.se);
}
root=mer(mer(l.fi,l.se),r.se);
}
void del(int v) {
p2 r=splv(root,v);
p2 l=splv(r.fi,v-1);
num[l.se].c--;
upl(l.se);
if(num[l.se].c==0)
l.se=-1;
root=mer(mer(l.fi,l.se),r.se);
}
int quer(int v) {
p2 a=splv(root,v-1);
int ret=num[a.fi].s+1;
root=mer(a.fi,a.se);
return ret;
}
int quev(int r) {
p3 a=splr(root,r);
int ret=num[a.se].v;
root=mer(mer(a.fi.fi,a.se),a.fi.se);
return ret;
}
int quef(int v) {
p2 a=splv(root,v-1);
int ret=a.fi;
while(num[ret].t[1]!=-1)
ret=num[ret].t[1];
root=mer(a.fi,a.se);
return num[ret].v;
}
int queb(int v) {
p2 a=splv(root,v);
int ret=a.se;
while(num[ret].t[0]!=-1)
ret=num[ret].t[0];
root=mer(a.fi,a.se);
return num[ret].v;
}
} treap;
inline int read() {
int f=1,x=0;
char ch=getchar();
while(ch<'0'||ch>'9')
f=(ch=='-'?-1:f),ch=getchar();
while(ch>='0'&&ch<='9')
x=x*10+ch-'0',ch=getchar();
return f*x;
}
int main() {
srand(time(NULL));
n=read();
while(n--) {
int opt=read(),x=read();
if(opt==1)
treap.ins(x);
if(opt==2)
treap.del(x);
if(opt==3)
printf("%d\n",treap.quer(x));
if(opt==4)
printf("%d\n",treap.quev(x));
if(opt==5)
printf("%d\n",treap.quef(x));
if(opt==6)
printf("%d\n",treap.queb(x));
}
}