#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
#define INF 1e9
int ch[maxn][2],dat[maxn],size[maxn],val[maxn],cnt[maxn];
int tot,root;int newno(int v){val[++tot]=v;cnt[tot]=1;dat[tot]=rand();size[tot]=1;return tot;
}void pushup(int id){size[id]=size[ch[id][0]]+size[ch[id][1]]+cnt[id];
}void build(){root=newno(-INF);ch[root][1]=newno(INF);pushup(root);
}void rotate(int &id,int d){int tmp=ch[id][d^1];ch[id][d^1]=ch[tmp][d];ch[tmp][d]=id;id=tmp;pushup(ch[id][d]);pushup(id);
}void insert(int &id,int v){if(!id){id=newno(v);return;}if(val[id]==v) {cnt[id]++;pushup(id);return;}int d=v<val[id]?0:1;insert(ch[id][d],v);if(dat[id]<dat[ch[id][d]]) rotate(id,d^1);pushup(id);
}void remove(int &id,int v){if(!id) return;if(v==val[id]){if(cnt[id]>1) {cnt[id]--;pushup(id);return;}if(ch[id][0]||ch[id][1]){if(!ch[id][1] || (ch[id][0] && dat[ch[id][0]] > dat[ch[id][1]])){rotate(id,1);remove(ch[id][1],v);}else{rotate(id,0);remove(ch[id][0],v);}pushup(id);}else id=0;return;}v<val[id]?remove(ch[id][0],v):remove(ch[id][1],v);pushup(id);
}int getrank(int id,int v){if(!id) return 1;if(val[id]==v) return size[ch[id][0]]+1;if(v<val[id]) return getrank(ch[id][0],v);else return size[ch[id][0]]+cnt[id]+getrank(ch[id][1],v);
}int getval(int id,int rank){if(!id) return INF;if(rank<=size[ch[id][0]]) return getval(ch[id][0],rank);else if(rank<=size[ch[id][0]]+cnt[id]) return val[id];else return getval(ch[id][1],rank-size[ch[id][0]]-cnt[id]);
}int getpre(int v){int id=root,pre=-INF;while(id){if(val[id]<v){pre=val[id];id=ch[id][1];}else id=ch[id][0];}return pre;
}int getnext(int v){int id=root,next=INF;while(id){if(val[id]>v){next=val[id];id=ch[id][0];}else id=ch[id][1];}return next;
}int main(){srand(time(0));build();int n;cin>>n;int op,x;while(n--){cin>>op>>x;if(op==1) insert(root,x);else if(op==2) remove(root,x);else if(op==3) cout<<getrank(root,x)-1<<endl;else if(op==4) cout<<getval(root,x+1)<<endl;else if(op==5) cout<<getpre(x)<<endl;else if(op==6) cout<<getnext(x)<<endl;}return 0;
}