#include <iostream>
#include <string>
#include <cmath>
using namespace std;
long int n = 1, q, in, op;
struct lb
{
long int le = 0, ri = 10005, num = 1e10;
} s[10006];
long int ip(long int x)
{
long int i, j;
for (j = 0, i = s[0].ri; s[i].num < x; i = s[i].ri, j++) {}
return j;
}
long int po(long int x)
{
long int ans = s[0].ri;
for (long int i = 1; i < x; i++)
{
ans = s[ans].ri;
}
return s[ans].num;
}
long int la(long int x)
{
long int i;
for (i = 1; s[i].num < x; i = s[i].ri) {}
if (s[i].le == 0) return -2147483647;
return s[s[i].le].num;
}
long int ne(long int x)
{
long int i;
for (i = 1; s[i].num <= x; i = s[i].ri) {}
if (i == 10005) return 2147483647;
return s[i].num;
}
void ib(long int m, long int a)
{
long int i;
for (i = s[0].ri; s[i].num < m; i = s[i].ri) {}
i = s[i].le;
s[n].num = m;
s[s[i].ri].le = n;
s[n].ri = s[i].ri;
s[i].ri = n, s[n++].le = i;
}
void gib(long int x)
{
ib(x, ip(x));
}
int main()
{
cin >> q;
for (long int i = 0; i < q; i++)
{
cin >> op >> in;
switch (op)
{
case 1:
cout << ip(in) + 1 << endl;
break;
case 2:
cout << po(in) << endl;
break;
case 3:
cout << la(in) << endl;
break;
case 4:
cout << ne(in) << endl;
break;
case 5:
gib(in);
break;
}
}
return 0;
}