#include<iostream>
#include<random>
#define print(a) printf("%d\n",a)
#define bk break
#define il inline
using namespace std;
il int read()
{
int x = 0,f = 1;char ch = getchar();
while (ch < '0' || ch>'9'){if (ch == '-'){f = -1;}ch = getchar();}
while (ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
return x * f;
}
const int N = 1e5 + 10;
std::mt19937 rnd(233);
struct Node {
int l, r;
int key, val, size;
};
Node tr[N];
int x, y, z;
int root, idx;
int init(int key) {
tr[++idx].key = key;
tr[idx].val = rnd();
tr[idx].size = 1;
return idx;
}
void update(int p) {
tr[p].size = tr[tr[p].l].size + tr[tr[p].r].size + 1;
}
void split(int p, int key, int& x, int& y) {
if (!p) {
x = y = 0;
} else {
if (tr[p].key <= key) {
x = p;
split(tr[p].r, key, tr[p].r, y);
} else {
y = p;
split(tr[p].l, key, x, tr[p].l);
}
update(p);
}
}
int merge(int x, int y) {
if (!x || !y)return (x + y);
if (tr[x].val > tr[y].val) {
tr[x].r = merge(tr[x].r, y);
update(x);
return x;
} else {
tr[y].l = merge(x, tr[x].l);
update(y);
return y;
}
}
void insert(int key) {
split(root, key, x, y);
root = merge(merge(x, init(key)), y);
}
void del(int key) {
split(root, key, x, z);
split(x, key - 1, x, z);
y = merge(tr[y].l, tr[y].r);
root = merge(merge(x, y), z);
}
void get_rank_by_key(int key) {
split(root, key - 1, x, y);
print(tr[x].size + 1);
root = merge(x, y);
}
void get_key(int rank) {
int p = root;
while (p) {
if (tr[tr[p].l].size + 1 == rank)
break;
else if (tr[tr[p].l].size >= rank)
p = tr[p].l;
else {
rank -= tr[tr[p].l].size + 1;
p = tr[p].r;
}
}
print(tr[p].key);
}
void get_prev(int key) {
split(root, key - 1, x, y);
int p = x;
while (tr[p].r) p = tr[p].r;
print(tr[p].key);
root = merge(x, y);
}
void get_next(int key) {
split(root, key, x, y);
int p = y;
while (tr[p].l) p = tr[p].l;
print(tr[p].key);
root = merge(x, y);
}
int n,opt,qwq;
signed main() {
n = read();
for(int i=1;i<=n;i++){
opt = read();
x = read();
switch (opt){
case 1:
insert(x);
bk;
case 2:
del(x);
bk;
case 3:
get_rank_by_key(x);
bk;
case 4:
get_key(x);
bk;
case 5:
get_prev(x);
bk;
case 6:
get_next(x);
bk;
default:
bk;
}
}
return 0;
}