#include<cstdio>
#include<cstdlib>
#include<ctime>
const int N = 1e5 + 9;
int q,op,x,cnt = 1,root = 1;
int read() {
char c = getchar();
int x = 0, f = 1;
while (c < '0' || c > '9')
c = getchar();
while (c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + c - 48;
c = getchar();
}
return x * f;
}
void write(int x){
if(x >= 10)
write(x / 10);
putchar(x % 10 + 48);
}
void print(int x){
write(x);
putchar('\n');
}
struct node{
int l,r,val,num_val,tree_size,num_cnt;
node(int _num_val_){
l = 0;
r = 0;
val = rand();
num_val = _num_val_;
tree_size = 1;
num_cnt = 1;
}
node(){}
} a[N];
void push_up(int root){
a[root].tree_size = a[a[root].l].tree_size + a[a[root].r].tree_size + a[root].num_cnt;
}
int x_rank(int x,int root){
if(root){
if(x < a[root].num_val)
return x_rank(x,a[root].l);
else if(x > a[root].num_val)
return x_rank(x,a[root].r) + a[a[root].l].tree_size + a[root].num_cnt;
return a[a[root].l].tree_size + 1;
}
return 1;
}
int xth_num(int x,int root){
if(x <= a[a[root].l].tree_size)
return xth_num(x,a[root].l);
else if(x <= a[a[root].l].tree_size + a[root].num_cnt)
return a[root].num_val;
return xth_num(x - (a[a[root].l].tree_size + a[root].num_cnt),a[root].r);
}
void zig(int &root){
int u = a[root].l;
a[root].l = a[u].r;a[u].r = root;root = u;
push_up(a[root].r);push_up(root);
}
void zag(int &root){
int u = a[root].r;
a[root].r = a[u].l;a[u].l = root;root = u;
push_up(a[root].l);push_up(root);
}
void insert(int x,int &root){
if(x < a[root].num_val){
if(!a[root].l){
a[root].l = ++cnt;
a[cnt] = node(x);
}
else{
insert(x,a[root].l);
if(a[root].val < a[a[root].l].val)
zig(root);
}
}
else if(x > a[root].num_val){
if(!a[root].r){
a[root].r = ++cnt;
a[cnt] = node(x);
}
else{
insert(x,a[root].r);
if(a[root].val < a[a[root].r].val)
zag(root);
}
}
else{
a[root].num_cnt++;
}
push_up(root);
}
void Remove(int x,int &root){
if(!root)
return;
if(x == a[root].num_val){
if(a[root].num_cnt >= 2){
a[root].num_cnt--;
return;
}
if(a[root].l || a[root].r){
if(!a[root].r || a[a[root].l].val > a[a[root].r].val){
zig(root);
Remove(x,a[root].r);
}
else{
zag(root);
Remove(x,a[root].l);
}
push_up(root);
}
else
root = 0;
return;
}
if(x < a[root].num_val)
Remove(x,a[root].l);
else
Remove(x,a[root].r);
push_up(root);
}
int main(){
srand(time(0));
scanf("%d", &q);
for(int i = 1;i <= q;i++){
scanf("%d%d", &op, &x);
if(op == 3){
printf("%d\n",x_rank(x,root));
}
if(op == 4){
printf("%d\n",xth_num(x,root));
}
if(op == 5){
int tmp = x_rank(x,root);
printf("%d\n",xth_num(tmp - 1,root));
}
if(op == 6){
int tmp = x_rank(x + 1,root);
printf("%d\n",xth_num(tmp,root));
}
if(op == 1)
insert(x,root);
if(op == 2)
Remove(x,root);
}
return 0;
}