#include <stdio.h>
int n,a[200005],x[200005],y[200005],m;
void schimba(int &a,int &b)
{
int aux;
aux=a; a=b; b=aux;
}
void swim(int k,int m,int *a,int *x,int *y)
{
while(k>1 && a[k]<a[k/2])
{
schimba(a[k],a[k/2]);
y[x[k]]=k/2;y[x[k/2]]=k;
schimba(x[k],x[k/2]);
k=k/2;
}
}
void sink(int k,int m,int *a,int *x,int *y)
{
int i=2*k;
while(i<=m)
{
if(a[i+1]<a[i])
i++;
if(a[i]<a[k])
{
schimba(a[k],a[i]);
y[x[k]]=i,y[x[i]]=k;
schimba(x[k],x[i]);
k=k/2;
}
else
break;
k=i;i=2*k;
}
}
int sterge(int k,int &m,int *a,int *x,int *y)
{
int crt=a[k],i,j;
/*
printf("%\n%d\n",k);
for(i=1;i<=m;i++)
printf("%4d ",a[i]);
printf("\n");
for(i=1;i<=m;i++)
printf("%4d ",x[i]);
printf("\n");
for(i=1;i<=m;i++)
printf("%4d ",y[i]);
printf("\n");
*/
a[k]=a[m];x[k]=x[m];
y[x[k]]=k;
m--;
if(k>1 && a[k]<a[k/2])
swim(k,m,a,x,y);
else
sink(k,m,a,x,y);
return crt;
}
int main()
{
int i,j,k,o,nei;
FILE *f,*g;
f=fopen("heapuri.in","r");
g=fopen("heapuri.out","w");
fscanf(f,"%d",&n);
m=0;nei=0;
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&o);
if(o==1)
{
fscanf(f,"%d",&j);
m++;nei++;
a[m]=j;x[m]=nei;y[nei]=m;
swim(m,m,a,x,y);
}
if(o==2)
{
fscanf(f,"%d",&j);
k=y[j];
sterge(k,m,a,x,y);
}
if(o==3)
{
fprintf(g,"%d\n",a[1]);
}
}
}