#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int n = 1e6+5;
ll heap[n] = {};//堆
ll len = 0;//堆长
void push(ll x) //上浮
{
heap[++len] = x;
ll i = len;
while(i > 1 && heap[i/2] > heap[i])
{
swap(heap[i/2], heap[i]);
i /= 2;
}
}
void pop() //下沉
{
heap[1] = heap[len--];
ll i=1;
while(i*2 <= len)
{
ll son = i*2;
if(son+1 <= len && heap[son] > heap[son+1]) son++;//选取较小节点
if(heap[i] > heap[son]) swap(heap[i],heap[son]), i = son;
else
{
break;
}
}
}
int main()
{
ll N;
scanf("%d",&N);
while(N--)
{
ll a;
scanf("%d",&a);
if(a == 1)
{
ll x;
scanf("%d",&x);
push(x);
}
else if(a == 2)
{
printf("%d\n",heap[1]);
}
else if(a == 3)
{
pop();
}
}
return 0;
}