#include<bits/stdc++.h>
using namespace std;
typedef int ll;
const ll N = 100009;
#define mp(a,b) make_pair((a),(b))
class Treap {
private:
ll root, cnt;
struct node {
ll l, r, s, v, k;
node();
node(ll);
} tr[N];
pair<int, int> split(ll p, ll k);
pair<int, int> splitvalue(ll p, ll v);
ll find(ll p, ll v);
ll merge(ll x, ll y);
void pushup(ll p);
public:
ll kth(ll k);
ll rank(ll v);
void insert(ll v);
void erase(ll v);
} tree;
Treap::node::node() {
l = 0, r = 0, s = 0, v = 0, k = rand();
}
Treap::node::node(ll _v) {
l = 0, r = 0, s = 0, v = _v, k = rand();
}
void Treap::pushup(ll p) {
tr[p].s = tr[tr[p].l].s + tr[tr[p].r].s + 1;
}
pair<int, int> Treap::split(ll p, ll k) {
if (!p) return mp(0, 0);
if (k <= tr[tr[p].l].s) {
auto o = split(tr[p].l, k);
tr[p].l = o.second;
pushup(p);
o.second = p;
return o;
}
auto o = split(tr[p].r, k);
tr[p].r = o.first;
pushup(p);
o.first = p;
return o;
}
pair<int, int> Treap::splitvalue(ll p, ll v) {
if (!p) return make_pair(0, 0);
if (v <= tr[p].v) {
auto o = split(tr[p].l, v);
tr[p].l = o.second;
pushup(p);
o.second = p;
return o;
}
auto o = split(tr[p].r, v);
tr[p].r = o.first;
pushup(p);
o.first = p;
return o;
}
ll Treap::find(ll p, ll v) {
if (tr[p].v == v) return v;
if (tr[p].v > v) return find(tr[p].l, v);
return find(tr[p].r, v);
}
ll Treap::merge(ll x, ll y) {
if (!x) return y;
if (!y) return x;
if (tr[x].k > tr[y].k) {
tr[x].r = merge(tr[x].r, y);
pushup(x);
return x;
}
tr[x].l = merge(tr[x].l, y);
pushup(x);
return x;
}
void Treap::erase(ll v) {
auto o = splitvalue(root, v);
auto t = o;
if (find(o.second, v)) {
t = split(o.second, 1);
}
root = merge(o.first, t.second);
}
void Treap::insert(ll v) {
auto o = splitvalue(root, v);
cnt++;
tr[cnt] = node(v);
o.first = merge(o.first, cnt);
root = merge(root, o.first);
}
ll Treap::rank(ll v) {
auto x = splitvalue(root, v);
ll sz = tr[x.first].s;
merge(x.first, x.second);
return ++sz;
}
ll Treap::kth(ll k) {
auto x = split(root, k - 1);
auto y = split(x.second, 1);
ll _v = tr[y.first].v;
merge(x.first, merge(y.first, y.second));
return _v;
}
int main() {
srand(time(0));
int t;
scanf("%d", &t);
while (t--) {
ll mode;
ll num;
scanf("%d%d", &mode, &num);
switch (mode) {
case 1:
tree.insert(num);
break;
case 2:
tree.erase(num);
break;
case 3:
printf("%d\n", tree.rank(num));
break;
case 4:
printf("%d\n", tree.kth(num));
break;
case 5:
printf("%d\n", tree.kth(tree.rank(num) - 1));
break;
case 6:
printf("%d\n", tree.kth(tree.rank(num) + 1));
break;
}
}
}