#include <bits/stdc++.h>
using namespace std;
ifstream fin("nums.in");
ofstream fout("nums.out");
int n, NR;
int a[100005], k[100005], pos[100005];
bool ok[100005];
string b;
pair <int, pair <string, int> > s[100005];
int Arb[400005];
void u(int st, int dr, int nod, int p){
if(st == dr){++Arb[nod]; return ;}
int mij = (st + dr) / 2;
if(p <= mij) u(st, mij, nod * 2, p);
else u(mij + 1, dr, nod * 2 + 1, p);
Arb[nod] = Arb[nod * 2] + Arb[nod * 2 + 1];
}
int q(int st, int dr, int nod, int val){
if(st == dr) return st;
int mij = (st + dr) / 2;
if(Arb[nod * 2] >= val) return q(st, mij, nod * 2, val);
else return q(mij + 1, dr, nod * 2 + 1, val - Arb[nod * 2]);
}
int main()
{
fin >> n;
int NR = 0;
for(int i = 1; i <= n ; ++i){
fin >> a[i];
if(a[i] == 1){
fin >> b;
++NR;
s[NR] = {b.size(), {b, NR}};
a[i] = NR;
}
else fin >> k[i];
}
sort(s + 1, s + NR + 1);
for(int i = 1; i <= NR ; ++i){
if(s[i].second.first != s[i - 1].second.first)
pos[s[i].second.second] = i, ok[s[i].second.second] = 1;
}
for(int i = 1; i <= n ; ++i){
if(a[i] >= 1){
if(ok[a[i]])
u(1, NR, 1, pos[a[i]]);
}
else if(a[i] == 0){
int pos = q(1, NR, 1, k[i]);
fout << s[pos].second.first << "\n";
}
}
return 0;
}