#include<iostream>
#include<algorithm>
using namespace std;
long long n,a[(int)1e6+10],cnt,i;
void up(long long x){
if(x/2!=0&&a[x/2]>a[x]) swap(a[x/2],a[x]),up(x/2);
}
void down(long long x){
long long v=x;
if(x*2<=cnt&&a[x]>a[x*2]) v=x*2;
if(x*2+1<=cnt&&a[v]>a[x*2+1]) v=x*2+1;
if(v!=x) swap(a[v],a[x]),down(v);
}
int main(){
cin>>n;
while(n--){
int x;
cin>>x;
if(x==1){
i++;
cnt++;
int yyy;
cin>>yyy;
a[i]=yyy;
up(i);
}
if(x==2){
cout<<a[1]<<"\n";
}
if(x==3){
swap(a[1],a[cnt]);
cnt--;
down(1);
}
}
}