#include <algorithm>
#include <iostream>
using namespace std;
int cnt;
bool rooted;
struct node
{
int val,cnt;
int size;
int l,r,f;
} a[1005];
void debug()
{
for(int i=1;i<=cnt;i++)
{
cout<<"#"<<i<<" val="<<a[i].val<<" cnt="<<a[i].cnt<<" size="<<a[i].size<<" l="<<a[i].l<<" r="<<a[i].r<<" f="<<a[i].f<<'\n';
}
}
int main(){
int n;
cin>>n;
while(n--)
{
int op,x;
cin>>op>>x;
switch(op)
{
case 1:{
int p=1,ans=0;
while(a[p].val!=x&&p)
{
if(a[p].val>x) p=a[p].l;
else
{
ans+=a[a[p].l].size+a[p].cnt;
p=a[p].r;
}
}
if(p)
ans+=a[a[p].l].size;
cout<<ans+1<<'\n';
break;
}
case 2:{
int p=1,ans=0;
while(p)
{
if(x<=a[a[p].l].size)
{
p=a[p].l;
}
else if(x<=a[a[p].l].size+a[p].cnt)
{
ans=a[p].val;
break;
}
else
{
x-=a[a[p].l].size+a[p].cnt;
p=a[p].r;
}
}
if(!p){cout<<"@\n";break;}
cout<<ans<<'\n';
break;
}
case 3:{
int p=1,ans=-2147483647;
while(p)
{
if(a[p].val<x) ans=max(ans,a[p].val),p=a[p].r;
else p=a[p].l;
}
cout<<ans<<'\n';
break;
}
case 4:{
int p=1,ans=2147483647;
while(p)
{
if(a[p].val>x) ans=min(ans,a[p].val),p=a[p].l;
else p=a[p].r;
}
cout<<ans<<'\n';
break;
}
case 5:{
if(!rooted)
{
rooted=true;
a[1].val=x;
a[1].cnt=1;
a[1].size=1;
cnt=1;
}
else
{
cnt++;
a[cnt].size=1;
a[cnt].cnt=1;
a[cnt].val=x;
int p=1;
while(a[p].val!=x)
{
a[p].size++;
if(a[p].val<x){
if(!a[p].r)
{
a[p].r=cnt;
a[cnt].f=p;
break;
}
else p=a[p].r;
}
else
{
if(!a[p].l)
{
a[p].l=cnt;
a[cnt].f=p;
break;
}
else p=a[p].l;
}
}
if(a[p].val==x) a[p].cnt++,cnt--;
break;
}
}
}
}
return 0;
}
WA