用的手写堆
#include<iostream>
#define fa(x) (x>>1)
#define le(x) (x<<1)
#define ri(x) ((x<<1)|1)
using namespace std;
const int dui_ms=1e6+5;
template<typename T>
struct small_dui{
T a[dui_ms<<1];
int back=0;
void push(T x){
if(back==0){
a[++back]=x;
}else{
int k=++back;
a[back]=x;
while(fa(k)>0){
if(a[k]<a[fa(k)]){
swap(a[k],a[fa(k)]);
k=fa(k);
}else{
break;
}
}
}
}
void pop(){
if(back==1){
back=0;
}else{
a[1]=a[back];
back--;
int k=1;
while(ri(k)<=back){
if(a[le(k)]<a[ri(k)]){
swap(a[le(k)],a[k]);
k=le(k);
}else{
swap(a[ri(k)],a[k]);
k=ri(k);
}
}
}
}
T front(){
return a[1];
}
};
small_dui<int>d;
void solve(){
int op;
cin>>op;
if(op==1){
int x;
cin>>x;
d.push(x);
}else if(op==2){
cout<<d.front()<<"\n";
}else{
d.pop();
}
}
int main(){
int t;
cin>>t;
while(t--)solve();
return 0;
}