#include<bits/stdc++.h>
#define mxn 100005
using namespace std;
struct node{
int ls, rs, vl, nc, siz, ct;
}tr[mxn];
int cnt, rt, q;
int nw(int x){
tr[++cnt].vl = x;
tr[++cnt].nc = rand();
tr[++cnt].siz = 1;
tr[++cnt].ct = 1;
return cnt;
}
void pup(int u){
tr[u].siz = tr[tr[u].ls].siz + tr[tr[u].rs].siz + tr[u].ct;
}
void build(){
rt = nw(-1145141919);
tr[rt].ls = nw(1145141919);
pup(rt);
}
void rtt(int &id, int fx){
if (fx == 0){
int tmp = tr[id].rs;
tr[id].rs = tr[tmp].ls;
tr[tmp].ls = id;
id = tmp;
pup(tr[id].ls);
pup(id);
}else{
int tmp = tr[id].ls;
tr[id].ls = tr[tmp].rs;
tr[tmp].rs = id;
id = tmp;
pup(tr[id].rs);
pup(id);
}
}
void ins(int &id, int x){
if (id == 0){
id = nw(x);
return;
}else{
if (x == tr[id].vl)
tr[id].ct++;
else{
if (x < tr[id].vl){
ins(tr[id].ls, x);
if (tr[id].nc < tr[tr[id].ls].nc)
rtt(id, 1);
}else{
ins(tr[id].rs, x);
if (tr[id].nc < tr[tr[id].rs].nc)
rtt(id, 0);
}
pup(id);
}
}
}
void del(int &id, int x){
if (!id)
return;
if (x == tr[id].vl){
if (tr[id].ct > 1){
tr[id].ct--;
pup(id);
return;
}
if (tr[id].ls || tr[id].rs){
if (!tr[id].rs || tr[tr[id].ls].nc > tr[tr[id].rs].nc){
rtt(id, 1);
del(tr[id].rs, x);
}else{
rtt(id, 0);
del(tr[id].ls, x);
}
pup(id);
}else{
id = 0;
return;
}
}
if (x < tr[id].vl)
del(tr[id].ls, x);
else
del(tr[id].rs, x);
pup(id);
}
int qrk(int id, int x){
if (!id)
return 1;
if (x == tr[id].vl)
return tr[tr[id].ls].siz + 1;
else if (x < tr[id].vl)
return qrk(tr[x].ls, x);
else
return tr[tr[id].ls].siz + tr[id].ct + qrk(tr[x].rs, x);
}
int qvl(int id, int rk){
if (!id)
return 1145141919;
if (rk <= tr[tr[id].ls].siz)
return qvl(tr[id].ls, rk);
else if (rk <= tr[tr[id].ls].siz + tr[id].ct)
return tr[id].vl;
else
return qvl(tr[id].rs, rk - tr[tr[id].rs].siz - tr[id].ct);
}
int qpr(int x){
int id = rt, pr;
while (id){
if (tr[id].vl < x)
pr = tr[id].vl, id = tr[id].rs;
else
id = tr[id].ls;
}
return pr;
}
int qnx(int x){
int id = rt, nx;
while (id){
if (tr[id].vl > x)
nx = tr[id].vl, id = tr[id].ls;
else
id = tr[id].rs;
}
return nx;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
build();
cin >> q;
while (q--){
int op, x;
cin >> op >> x;
if (op == 1)
ins(rt, x);
else if (op == 2)
del(rt, x);
else if (op == 3)
cout << qrk(rt, x) - 1 << "\n";
else if (op == 4)
cout << qvl(rt, x + 1) << "\n";
else if (op == 5)
cout << qpr(x) << "\n";
else if (op == 6)
cout << qnx(x) << "\n";
}
}