#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
int n, a[N], t;
void Up(int p) {
while (p > 1 && a[p] < a[p / 2])
swap(a[p], a[p / 2] ), p /= 2;
}
void Down(int p) {
while (p >= t) {
if (p * 2 > t) break;
if (p * 2 == t) {
if (a[p] > a[p * 2]) swap(a[p], a[p * 2]);
break;
}
int s = p * 2 + (a[p * 2] < a[p * 2 + 1]);
if (a[p] > a[s]) swap(a[p], a[s]), p = s;
else break;
}
}
void Push(int x) {
a[++t] = x, Up(t);
}
int Top() {
return a[1];
}
void Pop() {
a[1] = a[t--], Down(1);
}
int main() {
cin >> n;
while (n--) {
int o, x;
cin >> o;
if (o == 1) cin >> x, Push(x);
if (o == 2) cout << Top() << endl;
if (o == 3) Pop();
}
return 0;
}