#include<bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 100010
const int modp=998244353;
struct node{
int key,pri,lson,rson,siz;
}t[MAXN];
int q,cnt=0,root=0;
inline void update(int x){
t[x].siz=t[t[x].lson].siz+t[t[x].rson].siz+1;
}
void new_node(int v){
cnt++;
t[cnt].siz=1;
t[cnt].key=v;
t[cnt].pri=rand();
t[cnt].lson=t[cnt].rson=0;
}
void split(int x,int k,int &l,int &r){
if(!x){
l=0,r=0;
return;
}
if(t[x].key<=k){
l=x,split(t[x].rson,k,t[x].rson,r);
}else{
r=x,split(t[x].lson,k,l,t[x].lson);
}
update(x);
return ;
}
int merge(int l,int r){
if(!l||!r) return l+r;
if(t[l].pri<t[r].pri){
t[l].rson=merge(t[l].rson,r);
update(l);
return l;
}else{
t[r].lson=merge(l,t[r].lson);
update(r);
return r;
}
}
void insert(int a){
int l=0,r=0;
split(root,a,l,r);
new_node(a);
root=merge(merge(l,cnt),r);
}
void erase(int a){
int l=0,r=0,p=0;
split(root,a,l,r);
split(root,a-1,l,p);
p=merge(t[p].lson,t[p].rson);
root=merge(merge(l,p),r);
}
int search_rank(int a){
int l=0,r=0,res=0;
split(root,a-1,l,r);
res=t[l].siz+1;
root=merge(l,r);
return res;
}
int search_kth(int x,int a){
if(t[t[x].lson].siz==a-1) return t[x].key;
else if(t[t[x].lson].siz<a-1) return search_kth(t[x].rson,a-t[t[x].lson].siz-1);
else return search_kth(t[x].lson,a);
}
int prenum(int a){
int l=0,r=0,res=0;
split(root,a-1,l,r);
res=search_kth(t[l].siz,l);
root=merge(l,r);
return res;
}
int nxtnum(int a){
int l=0,r=0,res=0;
split(root,a,l,r);
res=search_kth(1,r);
root=merge(l,r);
return res;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
srand((unsigned)time(NULL));
cin>>q;
while(q--){
int op,x;
cin>>op>>x;
if(op==1){
insert(x);
}else if(op==2){
erase(x);
}else if(op==3){
cout<<search_rank(x)<<endl;
}else if(op==4){
cout<<search_kth(root,x)<<endl;
}else if(op==5){
cout<<prenum(x)<<endl;
}else{
cout<<nxtnum(x)<<endl;
}
}
return 0;
}