#include<bits/stdc++.h>
using namespace std;
const int inf=1e9+7;
int read(){
int x=0;
bool flag=false;
char ch=getchar();
while(ch>57||ch<48){
if(ch=='-'){
flag=true;
}
ch=getchar();
}
while(ch>=48&&ch<=57){
x=(x<<1)+(x<<3)+(ch-48);
ch=getchar();
}
return flag?-x:x;
}
int idx,m,root;
struct node{
int ls,rs,cnt,size,fa,val;
}tr[100003];
void pushup(int u){
tr[u].size=tr[tr[u].ls].size+tr[tr[u].rs].size+tr[u].cnt;
return;
}
void rotate(int u){
int v=tr[tr[u].fa].fa;
tr[u].fa=v;
bool flag=(tr[tr[u].fa].ls==u);
if(tr[v].rs==tr[u].fa){
tr[v].rs=u;
}else{
tr[v].ls=u;
}
tr[u].fa=v;
if(flag){
tr[tr[u].fa].ls=tr[u].rs;
}else{
tr[tr[u].fa].rs=tr[u].ls;
}
pushup(tr[u].fa),pushup(u);
return;
}
void splay(int u,int t){
while(tr[u].fa!=t){
int v=tr[tr[u].fa].fa;
if(v!=t){
if((tr[v].ls==tr[u].fa)^(tr[tr[u].fa].ls==u)){
rotate(tr[u].fa);
}
}
rotate(u);
}
if(t==0){
root=u;
}
return;
}
void find(int x){
int u=root;
while(tr[u].val!=x){
if(x<=tr[u].val&&tr[u].ls){
u=tr[u].ls;
continue;
}else if(x>tr[u].val&&tr[u].rs){
u=tr[u].rs;
continue;
}
break;
}
splay(u,0);
return;
}
void insert(int x){
int p=0,u=root;
while(u&&tr[u].val!=x){
p=u;
if(x<tr[u].val){
u=tr[u].ls;
}else{
u=tr[u].rs;
}
}
if(u){
tr[u].cnt+=1;
}else{
u=++idx;
if(p){
if(x<=tr[p].val){
tr[p].ls=u;
}else{
tr[p].rs=u;
}
tr[u].val=x,tr[u].fa=p;
tr[u].size=tr[u].cnt=1;
}
}
splay(u,0);
return;
}
int grank(int v){
find(v);
if(tr[root].val<v){
return tr[tr[root].ls].size+tr[root].cnt;
}
return tr[tr[root].ls].size;
}
int gval(int x){
int u=root;
while(1){
if(tr[tr[u].ls].size>=x){
u=tr[u].ls;
}else if(tr[tr[u].ls].size+tr[u].cnt>=x){
break;
}else{
x-=tr[tr[u].ls].size+tr[u].cnt;
u=tr[u].rs;
}
}
splay(u,0);
return tr[u].val;
}
int gnxt(int x){
find(x);
if(tr[root].val>x){
return root;
}
int u=tr[root].rs;
while(tr[u].ls){
u=tr[u].ls;
}
splay(u,0);
return u;
}
int gpre(int x){
find(x);
if(tr[root].val<x){
return root;
}
int u=tr[root].ls;
while(tr[u].rs){
u=tr[u].rs;
}
splay(u,0);
return u;
}
void del(int x){
int pre=gpre(x),nxt=gnxt(x);
splay(pre,0);
splay(nxt,pre);
int u=tr[nxt].ls;
if(tr[u].cnt>1){
tr[u].cnt-=1;
splay(u,0);
}else{
tr[nxt].ls=0;
splay(nxt,0);
}
return;
}
int main(){
int op,x;
insert(inf);
insert(-inf);
m=read();
while(m--){
op=read(),x=read();
switch(op){
case 1:insert(x);break;
case 2:del(x);break;
case 3:cout<<grank(x)+1<<"\n";break;
case 4:cout<<gval(x)<<"\n";break;
case 5:cout<<tr[gpre(x)].val<<"\n";break;
case 6:cout<<tr[gnxt(x)].val<<"\n";break;
default:break;
}
}
return 0;
}