import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.*;
public class Main{
    public static int heap[];
    public static boolean exist[];
    public static int sum=1;
    public static void main(String args[])throws IOException
    {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        in.nextToken();
        int n = (int) in.nval;
        heap = new int[10000005];
        while(n-->0)
        {
            in.nextToken();
            int x = (int) in.nval;
            if(x==1)
            {
                in.nextToken();
                int xx = (int) in.nval;
                InsertHeap(xx);
            }
            if(x==2)
                out.println(heap[1]);
            if(x==3)
                MovetHeap();
        }
        out.flush();
    }
    public static void InsertHeap(int x)
    {
        heap[sum] = x;
        int p = sum;
        sum++;
        while(p/2>=1)
        {
            if(heap[p]>=heap[p/2])
                return;
            else
            {
                int temp = heap[p];
                heap[p] = heap[p/2];
                heap[p/2] = temp;
            }
            p/=2;
        }
    }
    public static void MovetHeap()
    {
        heap[1] = heap[sum-1];
        sum--;
        int p = 1;
        while(p*2<sum)
        {
            int next = p*2;
            if(p*2<sum&&heap[p*2]>heap[p*2+1]) next++;
            if(next<sum&&heap[next]<heap[p])
            {
                int temp = heap[p];
                heap[p] = heap[next];
                heap[next] = temp;
            }
            p = next;
        }
    }
}