#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
const int NMAX = 200002;
int n;
int H[NMAX]; int N = 0;
int pos[NMAX];
int nr;
void inserare(int x, int idx) {
int fiu = N + 1;
int tata = fiu / 2;
while (tata != 0 && H[tata] > x) {
pos[tata] = fiu;
H[fiu] = H[tata];
fiu = tata;
tata = fiu / 2;
}
pos[idx] = fiu;
H[fiu] = x;
N++;
}
void combinare(int poz, int i) {
int tata, fiu, x;
x = H[poz];
tata = poz;
fiu = 2 * tata;
while (fiu <= N) {
if (fiu + 1 <= N && H[fiu + 1] < H[fiu])
fiu++;
if (H[fiu] < x) {
pos[fiu] = tata;
H[tata] = H[fiu];
tata = fiu;
fiu = 2 * tata;
}
else {
break;
}
}
pos[i] = tata;
H[tata] = x;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++) {
int op, x;
fin >> op;
if (op == 1) {
fin >> x; nr++;
pos[nr] = nr;
inserare(x, nr);
}
else if (op == 2) {
fin >> x;
H[pos[x]] = H[N--];
combinare(pos[x],i);
}
else
fout << H[1] << '\n';
}
return 0;
}