#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int Q = 25e4 + 5;
const int MX = 1e6 + 5;
struct Node {
int nxt[26];
int cnt = 0; // trie[v].cnt = Số xâu đi qua đỉnh v hay nói cách khác là nhận xâu s tương ứng với v làm prefix
int mark = -1;
Node() {
memset(nxt, -1, sizeof nxt);
}
};
int sz;
Node trie[MX];
void addString(const string& s, int i) {
int v = 0;
trie[v].cnt++;
for (char ch : s) {
int c = ch - 'a';
if (trie[v].nxt[c] == -1) {
trie[v].nxt[c] = ++sz;
}
v = trie[v].nxt[c];
trie[v].cnt++;
}
trie[v].mark = i;
}
// Tìm đỉnh v tương ứng với xâu s trong cây trie
int findV(const string& s) {
int v = 0;
for (char ch : s) {
int c = ch - 'a';
int nxt_v = trie[v].nxt[c];
if (nxt_v == -1) return -1;
v = nxt_v;
}
return v;
}
void removeString(const string& s) {
int v = 0 ;
trie[v].cnt--;
for (char ch : s) {
int c = ch - 'a';
v = trie[v].nxt[c];
trie[v].cnt--;
}
trie[v].mark = -1;
}
int findKth(const string& s, int k) {
int v = findV(s);
if (v == -1 || trie[v].cnt < k) return -1;
while (true) {
if (k == 1 && trie[v].mark != -1) break;
k -= (trie[v].mark != -1);
for (int c = 0; c <= 25; c++) {
int nxt_v = trie[v].nxt[c];
if (nxt_v == -1) continue;
if (k <= trie[nxt_v].cnt) {
v = nxt_v;
break;
}
else {
k -= trie[nxt_v].cnt;
}
}
}
return trie[v].mark;
}
int q;
string s[Q];
bool removed[Q];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> q;
for (int i = 1; i <= q; i++) {
string type; cin >> type;
if (type == "POST") {
int x; char c;
cin >> x >> c;
s[i] = s[x] + c;
addString(s[i], i);
}
if (type == "DELETE") {
int x; cin >> x;
if (removed[x]) continue;
removeString(s[x]);
removed[x] = true;
}
if (type == "GET") {
string s; int k;
cin >> s >> k;
int ans = findKth(s, k);
cout << (ans == -1 ? 404 : ans) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IFEgPSAyNWU0ICsgNTsgCmNvbnN0IGludCBNWCA9IDFlNiArIDU7IAoKc3RydWN0IE5vZGUgewoJaW50IG54dFsyNl07IAoJaW50IGNudCA9IDA7IC8vIHRyaWVbdl0uY250ID0gU+G7kSB4w6J1IMSRaSBxdWEgxJHhu4luaCB2IGhheSBuw7NpIGPDoWNoIGtow6FjIGzDoCBuaOG6rW4geMOidSBzIHTGsMahbmcg4bupbmcgduG7m2kgdiBsw6BtIHByZWZpeCAKCWludCBtYXJrID0gLTE7ICAKCglOb2RlKCkgewoJCW1lbXNldChueHQsIC0xLCBzaXplb2Ygbnh0KTsgCgl9Cn07IAoKaW50IHN6OyAKTm9kZSB0cmllW01YXTsgCgp2b2lkIGFkZFN0cmluZyhjb25zdCBzdHJpbmcmIHMsIGludCBpKSB7CglpbnQgdiA9IDA7IAoJdHJpZVt2XS5jbnQrKzsgCgoJZm9yIChjaGFyIGNoIDogcykgewoJCWludCBjID0gY2ggLSAnYSc7IAoJCWlmICh0cmllW3ZdLm54dFtjXSA9PSAtMSkgewoJCQl0cmllW3ZdLm54dFtjXSA9ICsrc3o7IAoJCX0KCQl2ID0gdHJpZVt2XS5ueHRbY107IAoJCXRyaWVbdl0uY250Kys7IAoJfQoKCXRyaWVbdl0ubWFyayA9IGk7IAp9CgovLyBUw6xtIMSR4buJbmggdiB0xrDGoW5nIOG7qW5nIHbhu5tpIHjDonUgcyB0cm9uZyBjw6J5IHRyaWUKaW50IGZpbmRWKGNvbnN0IHN0cmluZyYgcykgewoJaW50IHYgPSAwOyAgCgoJZm9yIChjaGFyIGNoIDogcykgewoJCWludCBjID0gY2ggLSAnYSc7ICAKCQlpbnQgbnh0X3YgPSB0cmllW3ZdLm54dFtjXTsgCgkJaWYgKG54dF92ID09IC0xKSByZXR1cm4gLTE7IAoJCXYgPSBueHRfdjsJCQoJfQoJCglyZXR1cm4gdjsgCn0KCnZvaWQgcmVtb3ZlU3RyaW5nKGNvbnN0IHN0cmluZyYgcykgewoJaW50IHYgPSAwIDsgICAKCXRyaWVbdl0uY250LS07IAoKCWZvciAoY2hhciBjaCA6IHMpIHsKCQlpbnQgYyA9IGNoIC0gJ2EnOyAKCQl2ID0gdHJpZVt2XS5ueHRbY107IAoJCXRyaWVbdl0uY250LS07IAoJfQoKCXRyaWVbdl0ubWFyayA9IC0xOyAKfQoKaW50IGZpbmRLdGgoY29uc3Qgc3RyaW5nJiBzLCBpbnQgaykgewoJaW50IHYgPSBmaW5kVihzKTsKCWlmICh2ID09IC0xIHx8IHRyaWVbdl0uY250IDwgaykgcmV0dXJuIC0xOyAgCgoJd2hpbGUgKHRydWUpIHsKCQlpZiAoayA9PSAxICYmIHRyaWVbdl0ubWFyayAhPSAtMSkgYnJlYWs7ICAKCQlrIC09ICh0cmllW3ZdLm1hcmsgIT0gLTEpOyAgCgoJCWZvciAoaW50IGMgPSAwOyBjIDw9IDI1OyBjKyspIHsKCQkJaW50IG54dF92ID0gdHJpZVt2XS5ueHRbY107IAoJCQlpZiAobnh0X3YgPT0gLTEpIGNvbnRpbnVlOyAKCQkJCgkJCWlmIChrIDw9IHRyaWVbbnh0X3ZdLmNudCkgewoJCQkJdiA9IG54dF92OyAKCQkJCWJyZWFrOyAKCQkJfQoJCQllbHNlIHsKCQkJCWsgLT0gdHJpZVtueHRfdl0uY250OyAKCQkJfQoJCX0KCX0KCglyZXR1cm4gdHJpZVt2XS5tYXJrOyAKfQoKaW50IHE7IApzdHJpbmcgc1tRXTsgCmJvb2wgcmVtb3ZlZFtRXTsgCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gcTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspIHsKCQlzdHJpbmcgdHlwZTsgY2luID4+IHR5cGU7IAoKCQlpZiAodHlwZSA9PSAiUE9TVCIpIHsKCQkJaW50IHg7IGNoYXIgYzsgCgkJCWNpbiA+PiB4ID4+IGM7IAoJCQlzW2ldID0gc1t4XSArIGM7IAoJCQlhZGRTdHJpbmcoc1tpXSwgaSk7CgkJfQoKCQlpZiAodHlwZSA9PSAiREVMRVRFIikgewoJCQlpbnQgeDsgY2luID4+IHg7IAoJCQlpZiAocmVtb3ZlZFt4XSkgY29udGludWU7IAoJCQlyZW1vdmVTdHJpbmcoc1t4XSk7CgkJCXJlbW92ZWRbeF0gPSB0cnVlOyAKCQl9CgoJCWlmICh0eXBlID09ICJHRVQiKSB7CgkJCXN0cmluZyBzOyBpbnQgazsgCgkJCWNpbiA+PiBzID4+IGs7IAoJCQlpbnQgYW5zID0gZmluZEt0aChzLCBrKTsgCgkJCWNvdXQgPDwgKGFucyA9PSAtMSA/IDQwNCA6IGFucykgPDwgJ1xuJzsgCgkJfQoJfQp9
MTMKUE9TVCAwIGwKUE9TVCAxIG0KUE9TVCAyIGEKUE9TVCAzIG8KUE9TVCAxIG8KUE9TVCA1IGwKUE9TVCAzIGkKUE9TVCAzIHUKR0VUIGxtYW8gMQpHRVQgbG1hbyAyCkdFVCBsbWEgMgpERUxFVEUgNwpHRVQgbG1hIDIK
13
POST 0 l
POST 1 m
POST 2 a
POST 3 o
POST 1 o
POST 5 l
POST 3 i
POST 3 u
GET lmao 1
GET lmao 2
GET lma 2
DELETE 7
GET lma 2