#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3;
int cnt = 0, root = 0, n;
struct node
{
int ls, rs, key, pri, size;
} t[N];
inline void newnode(int x)
{
t[++cnt].size = 1;
t[cnt].ls = t[cnt].rs = 0;
t[cnt].key = x;
t[cnt].pri = rand();
}
inline void update(int u) { t[u].size = t[t[u].ls].size + t[t[u].rs].size + 1; }
inline void spilt(int u, int x, int &l, int &r)
{
if (!u)
{
l = r = 0;
return;
}
if (t[u].key <= x)
{
l = u;
spilt(t[u].rs, x, t[u].rs, r);
}
else
{
r = u;
spilt(t[u].ls, x, l, t[u].ls);
}
update(u);
}
inline int merge(int l, int r)
{
if (!l || !r)
return l + r;
if (t[l].pri > t[r].pri)
{
t[l].rs = merge(t[l].rs, r);
update(l);
return l;
}
else
{
t[r].ls = merge(l, t[r].ls);
update(r);
return r;
}
}
inline void insert(int x)
{
int l, r;
spilt(root, x, l, r);
newnode(x);
int aa = merge(l, cnt);
root = merge(aa, r);
}
inline void del(int x)
{
int l, r, p;
spilt(root, x - 1, l, r);
spilt(l, x - 1, l, p);
p = merge(t[p].ls, t[p].rs);
root = merge(merge(l, p), r);
}
inline void Rank(int x)
{
int l, r;
spilt(root, x - 1, l, r);
printf("%d\n", t[l].size + 1);
root = merge(l, r);
}
inline int kth(int u, int k)
{
if (k == t[t[u].ls].size + 1)
return u;
if (k <= t[t[u].ls].size)
return kth(t[u].ls, k);
if (k > t[t[u].ls].size)
return kth(t[u].rs, k - t[t[u].ls].size - 1);
}
inline void pre(int x)
{
int l, r;
spilt(root, x - 1, l, r);
printf("%d\n", t[kth(l, t[l].size)].key);
root = merge(l, r);
}
inline void suc(int x)
{
int l, r;
spilt(root, x, l, r);
printf("%d\n", t[kth(r, 1)].key);
root = merge(l, r);
}
int main()
{
srand(time(NULL));
scanf("%d", &n);
while (n--)
{
int op, x;
scanf("%d%d", &op, &x);
if (op == 1)
insert(x);
else if (op == 2)
del(x);
else if (op == 3)
Rank(x);
else if (op == 4)
printf("%d\n", t[kth(root, x)].key);
else if (op == 5)
pre(x);
else
suc(x);
}
return 0;
}