using namespace std;
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <bitset>
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <algorithm>
#define f first
#define s second
#define II inline
#define db double
#define ll long long
#define mp make_pair
#define pb push_back
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define FORit(V) for((V)::iterator it = V.begin();it != V.end();++it)
#define CC(V) memset((V),0,sizeof((V)))
#define IN "nums.in"
#define OUT "nums.out"
#define N_MAX 1<<17
#define Sqrt 330
typedef pair<int,int> pi;
typedef vector<int> VI;
typedef pair<pi,string> data;
typedef vector<string> VS;
int size(-1),N,K,C[N_MAX];
bool type[N_MAX];
vector<data> V(N_MAX);
string word[1<<17];
char buffer[1<<23];
int Aib[Sqrt],Nr[Sqrt],A[N_MAX];
II void scan()
{
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
scanf("%d",&N);
fread(buffer,1,1<<23,stdin);
}
II void read(int &aux)
{
aux = 0;
for(;buffer[K] < '0' || buffer[K] > '9';++K);
for(;buffer[K] >= '0' && buffer[K] <= '9';++K)
aux = aux * 10 + buffer[K] - '0';
}
II void read_string(int poz)
{
int next(0);
char nr[1<<17];
for(;buffer[K] < '0' || buffer[K] > '9';++K);
for(;buffer[K] >= '0' && buffer[K] <= '9';++K)
nr[++next] = buffer[K] - '0';
V[poz].s.resize(next);
V[poz].f.s = next;
FOR(i,0,next-1)
V[poz].s[i] = nr[i+1];
}
II bool comp(data x,data y)
{
if(x.f.s != y.f.s)
return x.f.s < y.f.s;
FOR(i,0,(int)x.s.size()-1)
if(x.s[i] != y.s[i])
return x.s[i] < y.s[i];
return x.f.f < y.f.f;
}
II void compute()
{
int tip(0),next(0);
FOR(i,1,N)
{
read(tip);
if(!tip)
{
type[i] = false;
read(C[++C[0]]);
continue;
}
type[i] = true;
V[++next].f.f = ++C[0];
read_string(next);
}
sort(V.begin()+1,V.begin()+next+1,comp);
/* FOR(i,1,next)
{
printf("%d %d : ",V[i].f.f,V[i].f.s);
FOR(j,0,(int)V[i].s.size()-1)
printf("%d",V[i].s[j]);
printf("\n");
}
*/
int nr = 0;
FOR(i,1,next)
{
++nr;
if(i^1 && V[i].s == V[i-1].s && V[i].f.s == V[i-1].f.s)
{
C[ V[i].f.f ] = -1;
continue;
}
C[ V[i].f.f ] = nr;
}
// FOR(i,1,N)
// printf("%d %d\n",type[i],C[i]);
}
II void add(int val)
{
A[val] = true;
++Nr[val / Sqrt];
}
II void querry(int val)
{
int k(0);
for(;;++k)
if(Nr[k] < val)
val -= Nr[k];
else
break;
k *= Sqrt;
FOR(i,k,1<<17)
{
// A se sterge//
if(i > k+Sqrt)
return;
if(!A[i])
continue;
if(val>1)
{
--val;
continue;
}
for(string::iterator it=(V[i].s).begin();it != (V[i].s).end();++it)
buffer[++size] = *it + '0';
buffer[++size] = '\n';
return;
}
}
II void solve()
{
CC(buffer);
FOR(i,1,N)
if(type[i] == true)
{
if(C[i] == -1)
continue;
add(C[i]);
}
else
querry(C[i]);
buffer[++size] == '\0';
printf("%s",buffer);
}
int main()
{
scan();
compute();
solve();
return 0;
}