#include<iostream>
#include<cstdio>
using namespace std;
int v[200000], heap[200000], k=1, ind[200000];
void swap(int &a, int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
void urca(int heap[], int poz)
{
while(poz>1 &&v[heap[poz]]<v[heap[poz/2]])
{swap(heap[poz], heap[poz/2]);
ind[heap[poz]]=poz;
ind[heap[poz/2]]=poz/2;
poz/=2;
}
}
void coboara(int heap[], int &n, int poz)
{
if(2*poz>n) return;
int poz1=2*poz;
if(poz1+1<=n && v[heap[poz1]]>v[heap[poz1+1]])
poz1++;
if(v[heap[poz1]]<v[heap[poz]])
{
swap(heap[poz1], heap[poz]);
ind[heap[poz1]]=poz1;
ind[heap[poz]]=poz;
coboara(heap, n, poz1);
}
}
void inserare(int heap[], int &n, int val)
{
n++;
heap[n]=k;
ind[k]=n;
urca(heap, n);
k++;
}
void el_poz(int heap[],int &n, int poz)
{
ind[heap[poz]]=0;
heap[poz]=heap[n];
ind[heap[n]]=poz;
n--;
if(v[heap[poz]]<v[heap[poz/2]])
urca(heap, poz);
else coboara(heap, n, poz);
}
int main()
{
FILE *fin, *fout;
fin=fopen("heapuri.in", "r");
fout=fopen("heapuri.out", "w");
int i, x, y, n=0, m;
fscanf(fin, "%d", &m);
for(i=0; i<m; i++)
{
fscanf(fin, "%d", &x);
if(x==1)
{
fscanf(fin, "%d", &y);
v[k]=y;
inserare(heap, n, k);
}
if(x==2)
{
fscanf(fin, "%d", &y);
el_poz(heap, n, ind[y]);
}
if(x==3)
{
fprintf(fout, "%d\n", v[heap[1]]);
}
}
}