#include <iostream>
using namespace std;
#define maxn 100010
int N, maxdim;
char A[maxn], B[maxn];
struct Trie {
int value;
Trie *fiu[10];
Trie() {
value = 0;
memset(fiu, 0, sizeof(fiu));
}
};
Trie *T = new Trie;
int find(Trie *q, int poz) {
if(poz == maxdim) return 1;
int next = B[poz] - '0';
if(q->fiu[next]) return find(q->fiu[next], poz+1);
else return 0;
}
void insert(Trie *q, int poz) {
q->value++;
if(poz == maxdim) return;
int next = B[poz] - '0';
if(!q->fiu[next]) {
q->fiu[next] = new Trie;
}
insert(q->fiu[next], poz+1);
}
void query(Trie *q, int poz, int k) {
int nw = 0, lst = 0;
for(int i=0; i<=9; i++) {
if(q->fiu[i]) {
lst = nw;
nw += q->fiu[i]->value;
if(k <= nw) {
B[poz] = char('0' + i);
if(poz == maxdim-1) return;
else query(q->fiu[i], poz+1, k-lst);
return;
}
}
}
}
int main() {
FILE *f1=fopen("nums.in", "r"), *f2=fopen("nums.out", "w");
int i, j, t, k, len, ok;
fscanf(f1, "%d\n", &N);
for(i=1; i<=N; i++) {
fscanf(f1, "%d ", &t);
fgets(A, sizeof(A), f1);
len = strlen(A) - 1;
if(t == 1) maxdim = max(maxdim, len);
}
fclose(f1);
FILE *f3=fopen("nums.in", "r");
fscanf(f3, "%d\n", &N);
for(i=1; i<=N; i++) {
fscanf(f3, "%d ", &t);
if(t == 1) {
fgets(A, sizeof(A), f3);
len = strlen(A) - 1;
for(j=0; j<maxdim - len; j++) {
B[j] = '0';
}
for(j=0; j<len; j++) {
B[maxdim - len + j] = A[j];
}
ok = find(T, 0);
if(!ok) insert(T, 0);
}
else {
fscanf(f1, "%d", &k);
query(T, 0, k);
j=0;
while(B[j] == '0') j++;
for(; j<maxdim; j++) {
fprintf(f2, "%c", B[j]);
}
fprintf(f2, "\n");
}
}
fclose(f3); fclose(f2);
return 0;
}