#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int nv,nh,n,v[MAXN],h[MAXN],poz[MAXN];
void schimba(int p1,int p2) {
swap(h[p1],h[p2]);
poz[h[p1]]=p1;
poz[h[p2]]=p2;
}
void urca(int p) {
while(p>0&&v[h[p]]<v[h[(p-1)/2]]) {
schimba(p,(p-1)/2);
p=(p-1)/2;
}
}
void insereaza(int p) {
h[nh++]=p;
poz[p]=nh-1;
urca(nh-1);
}
void coboara(int p) {
int mn=p;
if(2*p+1<nh&& v[h[2*p+1]]<v[h[mn]]) {
mn=2*p+1;
}
if(2*p+2<nh&&v[h[2*p+2]]<v[h[mn]]) {
mn=2*p+2;
}
if(mn!=p) {
schimba(p,mn);
coboara(mn);
}
}
void sterge(int p) {
if(p==nh-1) {
nh--;
return;
}
schimba(p,nh-1);
nh--;
urca(p);
coboara(p);
}
int main() {
fin>>n;
for(int i=0; i<n; i++) {
int task;
fin>>task;
if(task==1) {
fin>>v[nv++];
insereaza(nv-1);
} else if(task==2) {
int pv;
fin>>pv;
pv--;
sterge(poz[pv]);
} else {
fout<<v[h[0]]<<'\n';
}
}
return 0;
}