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;
}
}
}
}