#include <bits/stdc++.h>
using namespace std;
struct node {
int l, r, v, c, s;
} tree[2000005];
int ttl;
int ins(int u, int x) {
if (ttl == 0 || u == 0) {
ttl++;
tree[ttl].v = x;
tree[ttl].c = 1;
tree[ttl].s = 1;
return ttl;
}
if (x < tree[u].v) {
tree[u].l = ins(tree[u].l, x);
}
else if (x > tree[u].v) {
tree[u].r = ins(tree[u].r, x);
}
else {
tree[u].c++;
}
tree[u].s = tree[u].c + tree[tree[u].l].s + tree[tree[u].r].s;
return u;
}
bool del(int u, int x) {
if (ttl == 0 || u == 0) return 0;
bool res = 0;
if (tree[u].v == x) {
if (tree[u].c) {
tree[u].c--;
res = 1;
}
}
else if (tree[u].v > x) {
res = del(tree[u].l, x);
}
else {
res = del(tree[u].r, x);
}
tree[u].s = tree[u].c + tree[tree[u].l].s + tree[tree[u].r].s;
return res;
}
int rankFind(int u, int k) {
if (ttl == 0 || u == 0) return -1;
if (tree[tree[u].l].s >= k) return rankFind(tree[u].l, k);
if (tree[tree[u].l].s + tree[u].c >= k) return tree[u].v;
return rankFind(tree[u].r, k - (tree[tree[u].l].s + tree[u].c));
}
int findRank(int u, int x) {
if (ttl == 0 || u == 0) return 1;
if (tree[u].v == x) return tree[tree[u].l].s + 1;
if (tree[u].v > x) return findRank(tree[u].l, x);
return tree[tree[u].l].s + tree[u].c + findRank(tree[u].r, x);
}
int pre(int x) {
int k = findRank(1, x);
return rankFind(1, k - 1);
}
int next(int x) {
int k = findRank(1, x + 1);
return rankFind(1, k);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int q;
cin >> q;
while (q--) {
int op;
cin >> op;
if (op == 1) {
int x;
cin >> x;
ins(1, x);
}
if (op == 2) {
int x;
cin >> x;
del(1, x);
}
if (op == 3) {
int x;
cin >> x;
cout << findRank(1, x) << endl;
}
if (op == 4) {
int x;
cin >> x;
cout << rankFind(1, x) << endl;
}
if (op == 5) {
int x;
cin >> x;
cout << pre(x) << endl;
}
if (op == 6) {
int x;
cin >> x;
cout << next(x) << endl;
}
}
return 0;
}