#include<iostream>
using namespace std;
int target, all = 0, mmin, mmax; int k = 0,b=0;
const int INF = 0x7fffffff;
struct TNode
{
int data;
TNode* left;
TNode* right;
};
TNode* root=NULL;
void insert(int a)
{
TNode* temp = new TNode,*idx;
temp->data = a;
temp->left = NULL;
temp->right = NULL;
if (root == NULL)
{
root = temp;
return;
}
idx = root;
while (1)
{
if (a <= idx->data)
{
if (idx->left == NULL)
{
idx->left = temp;
return;
}
idx = idx->left;
}
else
{
if (idx->right == NULL)
{
idx->right = temp;
return;
}
idx = idx->right;
}
}
}
void middleorder_1(TNode* now)
{
if (now!= NULL)
{
middleorder_1(now->left);
all++;
if (now->data == target)
{
cout << all << endl;
return;
}
middleorder_1(now->right);
}
}
void middleorder_2(TNode* now)
{
if (now != NULL)
{
middleorder_2(now->left);
all++;
if (all == target)
{
cout << now->data << endl;
return;
}
middleorder_2(now->right);
}
}
void middleorder_3(TNode* now)
{
if (now != NULL)
{
middleorder_3(now->left);
if (now->data==target)
{
cout << mmin << endl;
return;
}
mmin = now->data;
middleorder_3(now->right);
}
}
void middleorder_4(TNode* now)
{
if (now != NULL)
{
middleorder_4(now->left);
if (k)
{
cout << now->data << endl;
k = 0;
b = 1;
}
if (now->data == target)
k = 1;
middleorder_4(now->right);
}
}
int main()
{
int m,select;
cin >> m;
while (m)
{
all = 0; mmin = -INF; mmax = INF; k = 0; b = 0;
cin >> select>>target;
switch (select)
{
case 1:
middleorder_1(root);
break;
case 2:
middleorder_2(root);
break;
case 3:
middleorder_3(root);
break;
case 4:
middleorder_4(root);
if (!b)
cout << mmax << endl;
break;
case 5:
insert(target);
break;
}
m--;
}
}