#include<bits/stdc++.h>
using namespace std;
#define rep(i,l,r) for(int i=(l);i<=(r);++i)
#define pre(i,l,r) for(int i=(l);i>=(r);--i)
const int N=1e5+5;
struct node{
int vl,sz,ls,rs,pri;
}t[N];
inline void upd(int x){
t[x].sz=t[t[x].ls].sz+t[t[x].rs].sz+1;
}
inline void split(int u,int x,int &L,int &R){
if(!u){
L=R=0;return;
}
if(x<t[u].vl){
R=u;split(t[u].ls,x,L,t[u].ls);
}else{
L=u;split(t[u].rs,x,t[u].rs,R);
}
upd(u);
}
inline int merge(int u,int v){
if(!u||!v) return u+v;
if(t[u].pri<t[v].pri){
t[u].rs=merge(t[u].rs,v);
upd(u);
return u;
}else{
t[v].ls=merge(t[v].ls,u);
upd(v);
return v;
}
}
int rt=0,n,op,x,cnt=0,L,R,p;
inline void add(int x){
++cnt;t[cnt].vl=x;t[cnt].pri=rand();
t[cnt].ls=t[cnt].rs=0;t[cnt].sz=1;
split(rt,x,L,R);
rt=merge(merge(L,cnt),R);
}
inline void del(int x){
split(rt,x,L,R);split(L,x-1,L,p);
p=merge(t[p].ls,t[p].rs);
rt=merge(merge(L,p),R);
}
inline void rk_(int x){
split(rt,x-1,L,R);
cout<<t[L].sz+1<<'\n';
rt=merge(L,R);
}
inline int rank_(int u,int x){
if(x<=t[t[u].ls].sz){
return rank_(t[u].ls,x);
}else if(x==t[t[u].ls].sz+1){
return u;
}else{
return rank_(t[u].rs,x-t[t[u].ls].sz-1);
}
}
inline void kth(int x){
cout<<t[rank_(rt,x)].vl<<'\n';
}
inline void pr_(int x){
split(rt,x-1,L,R);
cout<<t[rank_(L,t[L].sz)].vl<<'\n';
rt=merge(L,R);
}
inline void nx_(int x){
split(rt,x,L,R);
cout<<t[rank_(R,1)].vl<<'\n';
rt=merge(L,R);
}
int main(){
srand(time(NULL));
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n;
rep(i,1,n){
cin>>op>>x;
if(op==1) add(x);
if(op==2) del(x);
if(op==3) rk_(x);
if(op==4) kth(x);
if(op==5) pr_(x);
if(op==6) nx_(x);
}
return 0;
}