#include<bits/stdc++.h>
using namespace std;
#define INF 1E8
struct node{
long long l=0,r=0,v=0,times=0;
bool sets=false;
long long ldeep=0,rdeep=0;
}p[10100]{};
long long top=0,q,op,x,maxn=-INF;
void debug()
{
for(long long i=1;i<=10;i++)
{
printf("id:%lld\nl:%lld r:%lld\nv:%lld\ntimes:%lld\n\n",i,p[i].l,p[i].r,p[i].v,p[i].times);
}
}
void insert(long long x,long pos)
{
if(top==0){
p[1].v=x;
p[1].sets=true;
p[1].times++;
maxn=1;
return;
}
if(x<p[pos].v)
{
if(p[pos].l) { p[pos].ldeep++; insert(x,p[pos].l);}
else{
long long po=pos+1;
while(p[po].sets) {
po++;
if(po>10010){
po=2;
}
}
maxn=max(maxn,po);
p[pos].ldeep++;
p[po].v=x;
p[po].times++;
p[pos].l=po;
p[po].sets=true;
return;
}
}
else if(p[pos].v==x) {p[pos].times++; return;}
else{
if(p[pos].r) { p[pos].rdeep++; insert(x,p[pos].r);}
else{
long long po=pos+1;
while(p[po].sets) {
po++;
if(po>10010){
po=2;
}
}
maxn=max(maxn,po);
p[pos].rdeep++;
p[po].v=x;
p[po].times++;
p[pos].r=po;
p[po].sets=true;
return;
}
}
}
void search(long long x,long long pos,long long ans)
{
if(top==0) {cout<<ans<<endl; return;}
if(x>=p[pos].v)
{
if(p[pos].r&&x>p[p[pos].r].v) search(x,p[pos].r,ans+p[pos].ldeep+p[pos].times);
else{
if(x>p[pos].v) {cout<<ans+p[pos].ldeep+1<<endl; return;}
else if(x==p[pos].v){ cout<<ans+p[pos].ldeep<<endl; return; }
}
}
else {
if(p[pos].l) search(x,p[pos].l,ans);
else {cout<<ans<<endl; return;}
}
}
void get_x(long long x,long long pos,long long cnt)
{
if(p[pos].ldeep>x-cnt-1) get_x(x,p[pos].l,cnt);
else if(p[pos].ldeep+p[pos].times>x-cnt-1) {cout<<p[pos].v<<endl; return;}
else {get_x(x,p[pos].r,cnt+p[pos].ldeep+p[pos].times);}
}
void get_front(long long x,long long pos)
{
long long ans=-INF;
if(top<=1) {cout<<-2147483647<<endl; return;}
for(long long i=1;i<=maxn;i++)
{
if(p[i].v<x)
{
ans=max(ans,p[i].v);
}
}
if(ans==(long long)-INF) {cout<<-2147483647<<endl; return;}
cout<<ans<<endl;
}
void get_back(long long x,long long pos)
{
long long ans=INF;
if(top<=1) {cout<<2147483647<<endl; return;}
for(long long i=1;i<=maxn;i++)
{
if(p[i].v>x)
{
ans=min(ans,p[i].v);
}
}
cout<<ans<<endl;
}
int main()
{
cin>>q;
for(long long i=1;i<=q;i++)
{
cin>>op>>x;
switch(op)
{
case 1:
{
search(x,1,1);
break;
}
case 2:
{
get_x(x,1,0);
break;
}
case 3:
{
get_front(x,1);
break;
}
case 4:
{
get_back(x,1);
break;
}
case 5:
{
insert(x,1);
top++;
break;
}
}
}
return 0;
}