#include <bits/stdc++.h>
using namespace std;
#define ls(n) n<<1
#define rs(n) n<<1|1
#define fa(n) n>>1
const int maxn=1e6+5;
int heap[maxn],top;
void swap(int &a,int &b)
{
int c=a;a=b;b=c;
}
void up(int i)
{
if (heap[i]<heap[fa(i)]&&i!=1)
{
swap(heap[i],heap[fa(i)]);
up(fa(i));
}
}
void down(int i)
{
int lson=heap[ls(i)],rson=heap[rs(i)];
if (lson!=0||rson!=0&&heap[i]>min(lson,rson))
{
if(lson!=0&&rson==0)
{
swap(heap[i],heap[ls(i)]);
down(ls(i));
}
else if(rson!=0&&lson==0)
{
swap(heap[i],heap[rs(i)]);
down(rs(i));
}
else
{
int minnum=lson<=rson?ls(i):rs(i);
swap(heap[i],heap[minnum]);
down(minnum);
}
}
return;
}
void heapinsert(int x)
{
heap[top+1]=x;top++;
up(top);
}
int heapmin(){return heap[1];}
void deletemin()
{
swap(heap[1],heap[top]);
heap[top--]=0;
down(1);
}
int main()
{
ios::sync_with_stdio(0);
int n,op,num;cin>>n;
for (int i=1;i<=n;i++)
{
cin>>op;
if (op==1) cin>>num;
switch(op)
{
case 1:heapinsert(num);break;
case 2:cout<<heapmin()<<endl;break;
case 3:deletemin();break;
default:break;
}
}
return 0;
}