using System.Collections.Generic;
using System.Linq;
public class Program {
   public static bool TryGetMinKey(SortedDictionary<int, int> list, out int value)
    {
        value = 0;
        if (list.Count <= 0) return false;
        var key =list.Keys.GetEnumerator();
        key.MoveNext();
        value = key.Current;
        return true;
    }
    public static void Main()
    {
        int count = int.Parse(System.Console.ReadLine());
        SortedDictionary<int, int> list = new SortedDictionary<int, int>();
        while (--count >= 0)
        {
            string line = System.Console.ReadLine();
            string[] po = line.Split();
            switch (po[0])
            {
                case "1":
                    int index = int.Parse(po[1]);
                    if (list.TryGetValue(index, out var value))
                    {
                        list[index] = value + 1;
                    }
                    else
                    {
                        list[index] = 1;
                    }

                    break;
                case "2":
                    if (TryGetMinKey(list,out value))
                    {
                        System.Console.WriteLine(value);
                    }
                    break;
                case "3":
                     if (TryGetMinKey(list,out value))
                    {
                        list[value] -= 1;
                        if (list[value]<=0)
                        {
                            list.Remove(value);
                        }
                    }
                    break;
            }
        }
    }
}