#include<cstdio>
#include<cstring>
#define L 1<<17
int max,pc,pp;
bool ok;
struct Nod
{
int nrcuv;
Nod *f[10];
Nod()
{
for(int i=0;i<10;i++)
f[i]=NULL;
nrcuv=0;
}
};
void init()
{
int poz,x,n,lung;
char s[L];
freopen("nums.in","r",stdin);
freopen("nums.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d ",&x);
if(x==1)
{
scanf("%s\n",&s);
lung=strlen(s);
if(lung>max)
max=lung;
}
else scanf("%d",&poz);
}
fclose(stdin);
}
void insert(Nod *nod,char str[L],int lung,int poz)
{
++nod->nrcuv;
if(poz==lung)
return;
if(pc+lung<max)
{
pc++;
if(nod->f[0])
{
insert(nod->f[0],str,lung,poz);
return;
}
nod->f[0]=new Nod();
insert(nod->f[0],str,lung,poz);
return;
}
int cor=str[poz]-'0';
if(nod->f[cor])
{
insert(nod->f[cor],str,lung,poz+1);
return;
}
nod->f[cor]=new Nod();
insert(nod->f[cor],str,lung,poz+1);
}
void check(Nod *nod,int poz)
{
for(int i=0;i<10;i++)
if(nod->f[i])
{
if(pp+(nod->f[i]->nrcuv)<poz)
{
pp+=nod->f[i]->nrcuv;
continue;
}
if(i)
ok=true;
if(ok==true)
printf("%d",i);
check(nod->f[i],poz);
return;
}
}
void read()
{
int poz,x,n;
char s[L];
freopen("nums.in","r",stdin);
scanf("%d",&n);
Nod *first=new Nod();
for(int i=1;i<=n;i++)
{
scanf("%d ",&x);
if(x==1)
{
scanf("%s\n",&s);
int lung=strlen(s);
pc=0;
insert(first,s,lung,0);
}
else
{
scanf("%d",&poz);
pp=0;
ok=false;
check(first,poz);
printf("\n");
}
}
fclose(stdin);
}
int main()
{
init();
read();
return 0;
}