#include<stdio.h>
#define MAXN 200005
FILE *f=fopen("heapuri.in","r"), *g=fopen("heapuri.out","w");
long int N, tip, x, LHeap=0, Heap[MAXN], LPoz=0, Poz[MAXN], v[MAXN];
// Poz[i] = pozitia celui de-al i-lea venit
// v[i] = al catelea a venit nodul de pe pozitia i in heap
void Schimba( long int &x, long int &y ){long int t=x;x=y;y=t;}
long int Minim( long int A, long int B ){if(A<B)return A;return B;}
void Insereaza( long int nr ){
long int el;
Heap[++LHeap] = nr; el = LHeap; Poz[++LPoz] = LHeap; v[LHeap]=LPoz;
while( el/2 >= 1 && Heap[el/2] > Heap[el] ){
Schimba( Heap[el], Heap[el/2] );
Schimba( v[el], v[el/2] );
Schimba( Poz[v[el]], Poz[v[el/2]] );
el/=2;
}
}
void Elimina( long int al ){
long int el = Poz[al], tata;
Schimba( Poz[al], Poz[v[LHeap]] );
Schimba( v[el], v[LHeap] );
Schimba( Heap[ el ], Heap[ LHeap ]); LHeap--;
while( el*2 <= LHeap && Minim(Heap[el*2],Heap[el*2+1]) < Heap[el] ){
tata = el*2;
if( el*2+1 <= LHeap && Heap[el*2+1] < Heap[el*2] ) tata = el*2+1;
Schimba( Heap[el], Heap[tata] );
Schimba( v[el], v[tata] );
Schimba( Poz[v[el]], Poz[v[tata]] );
el=tata;
}
}
int main(){
fscanf(f,"%ld",&N);
while( N >= 1 ){ N--;
fscanf(f,"%ld",&tip);
if( tip == 1 || tip == 2 ) fscanf(f,"%ld",&x);
if( tip == 1 ) Insereaza(x);
if( tip == 2 ) Elimina(x);
if( tip == 3 ) fprintf(g,"%ld\n",Heap[1]);
//fprintf(g,"(%ld >> %ld) ",tip,x);
//if(tip==2)fprintf(g," [[%ld]] ",Heap[Poz[x]]);
//for(long int i=1;i<=LHeap;i++)fprintf(g,"%ld ",Heap[i]);fprintf(g," | ");
//for(long int i=1;i<=LPoz;i++)fprintf(g,"%ld ",Poz[i]);fprintf(g,"\n");
}
return 0;
}