#include <bits/stdc++.h>
using namespace std;
int q,op,x,cnt=1,c=0,k;
struct node{
int data,l,r,size;
node(int ll,int rr,int s,int v) : l(ll),r(rr),size(s),data(v) {}
node() {}
}tree[10010];
void insert(int root,int x){
if (x < tree[root].data){
if (!tree[root].l) tree[tree[root].l = ++cnt]=node(0,0,1,x);
else insert(tree[root].l,x);
}
else if (x > tree[root].data){
if (!tree[root].r) tree[tree[root].r = ++cnt]=node(0,0,1,x);
else insert(tree[root].r,x);
}
tree[root].size=tree[tree[root].l].size+tree[tree[root].r].size+1;
}
int find(int xx,int root){
if (!tree[root].data) return 1;
if (root){
if (xx < tree[root].data) return find(xx,tree[root].l);
else if (xx > tree[root].data) return find(xx,tree[root].r)+tree[tree[root].l].size+1;
else return tree[tree[root].l].size+1;
}
}
int findd(int xx,int root){
if (!tree[root].data) return 0;
if (root){
if (xx <= tree[tree[root].l].size) findd(xx,tree[root].l);
else if (xx > tree[tree[root].l].size+1) findd(xx-1-tree[tree[root].l].size,tree[root].r);
else return tree[root].data;
}
}
int main(){
cin >> q;
while (q--){
cin >> op >> x;
if (op == 1) cout << find(x,1) << endl;
else if (op == 2) cout << findd(x,1) << endl;
else if (op == 3){
k=findd(find(x,1)-1,1);
if (k) cout << k << endl;
else cout << -2147483647 << endl;
}
else if (op == 4){
k=findd(find(x,1)+1,1);
if (k) cout << k << endl;
else cout << 2147483647 << endl;
}
else if (op == 5){
c++;
if (c == 1){
tree[1].data=x;
tree[1].size=1;
}else insert(1,x);
}
}
return 0;
}