#include <cstdio>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#define oo 0x3f3f3f3f
using namespace std;
struct nod
{
char *v;
int len;
int p;
int nr;
nod *left, *right;
};
typedef nod* tree;
tree R, nil;
void init ()
{
nil = new nod;
nil->left = nil->right = 0;
nil->v = 0;
nil->p = -oo;
nil->nr = 0;
R = nil;
}
inline void getnr (tree &n)
{
if (n == nil) return;
n->nr = 1 + n->left->nr + n->right->nr;
}
inline void rotleft (tree &n)
{
tree t = n->left;
n->left = t->right;
t->right = n;
getnr (n); getnr (t);
n = t;
}
inline void rotright (tree &n)
{
tree t = n->right;
n->right = t->left;
t->left = n;
getnr (n); getnr (t);
n = t;
}
int left, right;
int length;
inline void insert (tree &n, char *v, int len)
{
if (n == nil)
{
n = new nod;
n->left = n->right = nil;
n->p = rand ();
n->nr = 1;
n->len = len;
n->v = new char[len + 1];
strcpy (n->v, v);
return;
}
int cmp = 0;
bool okay = false;
if (n->len < len) cmp = -1;
else
if (n->len > len) cmp = 1;
else
{
// cmp = strcmp (n->v, v);
okay = true;
int i;
// fprintf (stderr, "%s v: %s ->%d %d \n", n->v, v, left, right);
for (i = min (left, right) - 1 ; i < len; ++i)
{
if (v[i] == n->v[i])
length = i + 1;
if (v[i] < n->v[i])
{
cmp = 1;
break;
}
if (v[i] > n->v[i])
{
cmp = -1;
break;
}
}
}
if (cmp > 0)
{
right = okay == true ? length : 0;
insert (n->left, v, len);
if (n->left->p > n->p)
rotleft (n);
}
if (cmp < 0)
{
left = okay == true ? length : 0;
insert (n->right, v, len);
if (n->right->p > n->p)
rotright (n);
}
getnr (n);
}
char * findk (tree &n, int k)
{
if (n == nil) return NULL;
if (n->left->nr + 1 > k) return findk (n->left, k);
if (n->left->nr + 1 < k) return findk (n->right, k - (n->left->nr + 1));
return n->v;
}
void ino (tree n)
{
if (n == nil) return;
ino (n->left);
fprintf (stderr, "(%s) ", n->v);
ino (n->right);
}
char ax[100003];
int main ()
{
freopen ("nums.in", "r", stdin);
freopen ("nums.out", "w", stdout);
srand (time (0));
init ();
int n;
/*
sprintf (ax, "1111112");
insert (R, ax, strlen (ax));
sprintf (ax, "1111113");
insert (R, ax, strlen (ax));
sprintf (ax, "1111116");
insert (R, ax, strlen (ax));
sprintf (ax, "1111119");
insert (R, ax, strlen (ax));
sprintf (ax, "1111114");
insert (R, ax, strlen (ax));
sprintf (ax, "1111118");
insert (R, ax, strlen (ax));
fprintf (stderr,"\n\n\n");
ino (R);
fprintf (stderr,"\n\n\n");
memset (ax, 0, sizeof (ax));
*/
scanf ("%d\n", &n);
int t;
int len;
int k;
while (n--)
{
scanf ("%d ", &t);
if (t == 1)
{
scanf ("%s\n", &ax);
len = strlen (ax);
left = right = length = 0;
insert (R, ax, len);
memset (ax, 0, sizeof (char) * (len + 1));
}
else
{
scanf ("%d\n", &k);
// printf ("__%d\n", k);
printf ("%s\n", findk (R, k));
}
}
//printf ("%d\n", R->nr);
//ino (R);
return 0;
}