#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5,randmax=9999,randmin=1;
int cnt,root;
struct fhq_treap{
int ls,rs;
int data,val;
int size;
}tr[maxn];
void inittreap(int data)
{
cnt++;
tr[cnt].size=1;
tr[cnt].ls=0;tr[cnt].rs=0;
tr[cnt].data=data;
tr[cnt].val=rand()%randmax+randmin;
}
void upsize(int p)
{
tr[p].size=tr[tr[p].ls].size+tr[tr[p].rs].size+1;
}
void split(int u,int x,int &l,int &r)
{
if (!u)
{
l=0;r=0;return;
}
if (tr[u].data<=x)
{
l=u;
split(tr[u].rs,x,tr[u].rs,r);
}
else
{
r=u;
split(tr[u].ls,x,l,tr[u].ls);
}
upsize(u);
}
int merge(int l,int r)
{
if (l==0||r==0) return l+r;
if (tr[l].val>tr[r].val)
{
tr[l].rs=merge(tr[l].rs,r);
upsize(l);
return l;
}
else
{
tr[r].ls=merge(l,tr[r].ls);
upsize(r);
return r;
}
}
int Insert(int x)
{
int l,r;
split(root,x,l,r);
inittreap(x);
int a=merge(l,cnt);
root=merge(a,r);
}
void del(int x)
{
int l,r,p;
split(root,x,l,r);
split(l,x-1,l,p);
p=merge(tr[p].ls,tr[p].rs);
root=merge(merge(l,p),r);
}
void paiming(int x)
{
int l,r;
split(root,x-1,l,r);
cout<<tr[l].size+1<<endl;
root=merge(l,r);
}
int kth(int u,int k)
{
if (k==tr[tr[u].ls].size+1) return u;
if (k<=tr[tr[u].ls].size) return kth(tr[u].ls,k);
if (k>tr[tr[u].ls].size) return kth(tr[u].rs,k-tr[tr[u].ls].size-1);
}
void pre(int x)
{
int l,r;
split(root,x-1,l,r);
cout<<tr[kth(l,tr[l].size)].data<<endl;
root=merge(l,r);
}
void suf(int x)
{
int l,r;
split(root,x,l,r);
cout<<tr[kth(r,1)].data<<endl;
root=merge(l,r);
}
int main()
{
ios::sync_with_stdio(0);
srand(time(0));
int opt,x,n;cin>>n;
for (int i=1;i<=n;i++)
{
cin>>opt>>x;
switch(opt)
{
case 1:Insert(x);break;
case 2:del(x);break;
case 3:paiming(x);break;
case 4:cout<<tr[kth(root,x)].data<<endl;break;
case 5:pre(x);break;
case 6:suf(x);break;
default:break;
}
}
return 0;
}