
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<ctime>
#include<deque>
#include<fstream>
#include<string.h>
#define mod 1000000007
#define register
#define fint register int
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
inline ll read()
{
ll x=0;
char ch=0;
while(ch<'0'||ch>'9') ch=getchar();
while('0'<=ch&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
int n,root,cnt;
struct node{
int ch[2],fa,val,cnt,siz;
}spl[1000010];
void update(int x)
{
spl[x].siz=spl[spl[x].ch[0]].siz+spl[spl[x].ch[1]].siz+spl[x].cnt;
}
inline bool ident(int x,int fa)
{
return spl[fa].ch[1]==x;
}
inline void connect(int x,int fa,int s)
{
spl[fa].ch[s]=x;
spl[x].fa=fa;
}
void rotate(int x)
{
int y=spl[x].fa;
int z=spl[y].fa;
int k=ident(x,y);
connect(spl[x].ch[k^1],y,k);
connect(x,z,ident(y,z));
connect(y,x,k^1);
update(y);
update(x);
}
void splay(int x,int top)
{
if(!top) root=x;
while(spl[x].fa!=top)
{
int y=spl[x].fa,z=spl[y].fa;
if(z!=top) ident(y,z)^(x,y)?rotate(x):rotate(y);
rotate(x);
}
}
void add_node(int &now,int fa,int val)
{
now=++cnt;
spl[now].val=val;
spl[now].fa=fa;
spl[now].siz=spl[now].cnt=1;
}
void insert(int val,int &now=root,int fa=0)
{
if(!now)
{
add_node(now,fa,val);
splay(now,0);
}
else if(val<spl[now].val) insert(val,spl[now].ch[0],now);
else if(val>spl[now].val) insert(val,spl[now].ch[1],now);
else
{
spl[now].cnt++;
splay(now,0);
}
}
void find_rank(int x)
{
int now=root;
if(!now) return;
while(spl[now].ch[x>spl[now].val]&&x!=spl[now].val)
{
now=spl[now].ch[x>spl[now].val];
}
splay(now,0);
}
int pre(int x)
{
find_rank(x);
int now=spl[root].ch[0];
while(spl[now].ch[1])
{
now=spl[now].ch[1];
}
return now;
}
int nxt(int x)
{
find_rank(x);
int now=spl[root].ch[1];
while(spl[now].ch[0])
{
now=spl[now].ch[0];
}
return now;
}
int find_x(int x)
{
int now=root;
while(true)
{
if(x<=spl[spl[now].ch[0]].siz)
{
now=spl[now].ch[0];
}
else
{
x-=(spl[spl[now].ch[0]].siz+spl[now].cnt);
if(x<=0) return now;
else now=spl[now].ch[1];
}
}
}
void del(int x)
{
int a=pre(x),b=nxt(x);
splay(a,0);
splay(b,a);
int tmp=spl[b].ch[0];
if(spl[tmp].cnt>1)
{
spl[tmp].cnt--;
splay(tmp,0);
}
else spl[b].ch[0]=0;
}
int main()
{
n=read();
int opt,x;
insert(0x7fffffff);
insert(-0x7fffffff);
for(int i=1;i<=n;i++)
{
opt=read();x=read();
if(opt==1) insert(x);
else if(opt==2) del(x);
else if(opt==3)
{
find_rank(x);
printf("%d\n",spl[spl[root].ch[0]].siz);
}
else if(opt==4)
{
printf("%d\n",spl[find_x(x+1)].val);
}
else if(opt==5)
{
insert(x);
printf("%d\n",spl[pre(x)].val);
del(x);
}
else if(opt==6)
{
insert(x);
printf("%d\n",spl[nxt(x)].val);
del(x);
}
}
return 0;
}