#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int inf = 1e9;
int treap[MAXN][2], key[MAXN], val[MAXN], size[MAXN], cnt[MAXN];
int tot, root;
int get_new(int o) {
key[++tot] = o;
val[tot] = rand();
size[tot] = cnt[tot] = 1;
return tot;
}
void push_up(int o) {
size[o] = size[treap[o][0]] + size[treap[o][1]] + cnt[o];
}
void build() {
root = get_new(-inf), treap[root][1] = get_new(inf);
push_up(root);
}
void rotate(int &o, int d) {
int son = treap[o][d ^ 1];
treap[o][d ^ 1] = treap[son][d];
treap[son][d] = o;
o = son;
push_up(treap[o][d]);
push_up(o);
}
void insert(int &o, int v) {
if (!o) {
o = get_new(v);
return;
}
if (v == key[o]) cnt[o]++;
else {
int d = v < key[o] ? 0 : 1;
insert(treap[o][d], v);
if (val[o] < val[treap[o][d]]) rotate(o, d ^ 1);
}
push_up(o);
}
void remove(int &o, int v) {
if (!o) return;
if (v == key[o]) {
if (cnt[o] > 1) {
cnt[o]--;
push_up(o);
return;
}
if (treap[o][0] || treap[o][1]) {
if (!treap[o][1] || val[treap[o][0]] > val[treap[o][1]]) {
rotate(o, 1);
remove(treap[o][1], v);
} else {
rotate(o, 0);
remove(treap[o][0], v);
}
push_up(o);
} else o = 0;
return;
}
v < key[o] ? remove(treap[o][0], v) : remove(treap[o][1], v);
push_up(o);
}
int find_rank(int o, int v) {
if (!o) return 0;
if (v == key[o]) return size[treap[o][0]] + 1;
else if (v < key[o]) return find_rank(treap[o][0], v);
else return find_rank(treap[o][1], v) + cnt[o] + size[treap[o][0]];
}
int find_key(int o, int rank) {
if (!o) return inf;
if (rank <= size[treap[o][0]]) return find_key(treap[o][0], rank);
else if (rank <= size[treap[o][0]] + cnt[o]) return key[o];
else return find_rank(treap[o][1], rank - size[treap[o][0]] - cnt[o]);
}
int find_pre(int v) {
int o = root, pre;
while (o) {
if (key[o] < v) {
pre = key[o];
o = treap[o][1];
} else o = treap[o][0];
}
return pre;
}
int find_nxt(int v) {
int o = root, nxt;
while (o) {
if (key[o] > v) {
nxt = key[o];
o = treap[o][0];
} else o = treap[o][1];
}
return nxt;
}
int main() {
int n;
cin >> n;
build();
while (n--) {
int op, x;
cin >> op >> x;
if (op == 1) insert(root, x);
else if (op == 2) remove(root, x);
else if (op == 3) cout << find_rank(root, x) - 1 << endl;
else if (op == 4) cout << find_key(root, x + 1) << endl;
else if (op == 5) cout << find_pre(x) << endl;
else cout << find_nxt(x) << endl;
}
return 0;
}