#include<bits/stdc++.h>
#define ls s[0]
#define rs s[1]
#define getdir(u,v) (t[v].rs == u)
#define setson(u,c,v) t[u].s[c] = v,t[v].p = u
using namespace std;
const int maxn = 1e5+10;
struct node { int val,siz,cnt,s[2],p; }t[maxn];
int n,m,x,cnt,rt,l,r,tmp; char opt;
void pushup(int u) { u[t].siz = u[t].ls[t].siz + u[t].rs[t].siz + 1; }
void rota(int x) {
int y = t[x].p,z = t[y].p, c = getdir(x,y);
setson(z,getdir(y,z),x);
setson(y,c,t[x].s[!c]);
setson(x,!c,y);
pushup(y),pushup(x);
}
void splay(int x,int k) {
while(t[x].p != k) {
int y = t[x].p,z = t[y].p;
if(z != k) rota(getdir(x,y)^getdir(y,z) ? x : y);
rota(x);
} if(!k) rt = x;
}
int geturk(int u,int k) {
while(1) {
int less = t[u].ls[t].siz;
if(k <= less) u = t[u].ls;
else if(k <= less + t[u].cnt) { splay(u,0); return u;}
else k -= less + t[u].cnt,u = t[u].rs;
}
}
int getuval(int u,int val) {
while(u) {
if(t[u].val == val) return u;
pushdown(u);
u = t[u].s[val > t[u].val];
}
assert(0);
}
int merge(int u,int v) {
if(!u || !v) return u|v;
int maxon = geturk(u,t[u].siz);
splay(maxon,0);
setson(rt,1,v);
pushup(rt);
return rt;
}
void delu(int u) {
splay(u,0);
if(t[rt].cnt > 1) --t[rt].cnt;
else {
rt = merge(t[rt].ls,t[rt].rs);
t[rt].p = 0;
}
}
int insert(int &u,int p,int val) {
if(!u) {
u = ++cnt;
t[u].p = p;
t[u].cnt = t[u].siz = 1;
t[u].val = val;
return u;
}
if(t[u].val == val) {
++t[u].cnt,++t[u].siz;
return u;
}
int res = insert(t[u].s[t[u].val < val],u,val);
pushup(u);
return res;
}
void insert(int u,int val) { splay(insert(u,0,val),0); }
int getrk(int val) {
int rk = 0,u = rt;
while(u) {
if(val == t[u].val) {
rk += t[u].ls[t].siz;
splay(u,0); return rk;
}
if(val < t[u].val) u = t[u].ls;
else {
rk += u[t].ls[t].siz + t[u].cnt;
u = t[u].rs;
}
}
return rk;
}
int getval(int u,int k) { int v = geturk(u,k); return t[v].val; }
void del(int u,int val) { int v = getuval(u,val); delu(v); }
signed main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n;
while(n--) {
cin>>opt>>x;
switch(opt) {
case '1': insert(rt,x); break;
case '2': del(rt,x); break;
case '3': cout<<getrk(x)+1<<'\n'; break;
case '4': cout<<getval(rt,x)<<'\n'; break;
case '5':
tmp = getrk(x); cout<<getval(rt,tmp)<<'\n'; break;
case '6':
tmp = getrk(x+1); cout<<getval(rt,tmp+1)<<'\n';
}
}
}
WA 6-10