#include <bits/stdc++.h>
#define pb push_back
#define pii pair <int, int>
#define mp make_pair
#define F first
#define S second
#define ll long long
#define iosbase ios_base::sync_with_stdio(false)
#define sc scanf
#define pr printf
#define null NULL
#define getcx getchar_unlocked
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define pll pair<ll,ll>
#define vi vector <int>
#define vll vector <ll>
#define maxs 100005
#define logmaxs 35
#define MOD 1000000007
#define eps 1e-9
#define llmax 1e15+5
#define intmax 1e9+5
#define intmin -intmax
#define pi 3.14159265358979
using namespace std;
map <int, int> ans[maxs];
string s;
vector <string> v;
int mrk[maxs];
struct trie{
int edge[26];
int prefix;
};
trie tree[maxs];
int cnt;
void insert(int node, int idx){
if(idx==s.size()){
tree[node].prefix++;
ans[idx][tree[node].prefix]++;
return ;
}
int x=s[idx]-'a';
tree[node].prefix++;
ans[idx][tree[node].prefix]++;
if(tree[node].edge[x]!=0){
insert(tree[node].edge[x], idx+1);
}
else{
++cnt;
tree[node].edge[x]=cnt;
insert(tree[node].edge[x], idx+1);
}
}
void remove(int node, int idx){
if(idx==s.size()){
ans[idx][tree[node].prefix]--;
tree[node].prefix--;
return ;
}
remove(tree[node].edge[s[idx]-'a'], idx+1);
ans[idx][tree[node].prefix]--;
tree[node].prefix--;
int x=tree[node].edge[s[idx]-'a'];
if(tree[x].prefix==0)
tree[node].edge[s[idx]-'a']=0;
}
int main(){
iosbase;
int q,t,k,l,x;
cin>>q;
for(int i=0; i<q; i++){
cin>>t;
if(t==1){
cin>>s;
reverse(s.begin(), s.end());
v.pb(s);
mrk[v.size()]=1;
insert(0, 0);
}
else if(t==2){
v.pb("");
cin>>k>>l;
if(ans[l][k])
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else {
v.pb("");
cin>>x;
if(!mrk[x])
continue;
s=v[x-1];
mrk[x]=0;
remove(0, 0);
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGlvc2Jhc2UgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSkKI2RlZmluZSBzYyBzY2FuZgojZGVmaW5lIHByIHByaW50ZgojZGVmaW5lIG51bGwgTlVMTAojZGVmaW5lIGdldGN4IGdldGNoYXJfdW5sb2NrZWQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHBsbCBwYWlyPGxsLGxsPgojZGVmaW5lIHZpIHZlY3RvciA8aW50PgojZGVmaW5lIHZsbCB2ZWN0b3IgPGxsPgogCiNkZWZpbmUgbWF4cyAxMDAwMDUKI2RlZmluZSBsb2dtYXhzIDM1CiAKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIGVwcyAxZS05CiNkZWZpbmUgbGxtYXggMWUxNSs1CiNkZWZpbmUgaW50bWF4IDFlOSs1CiNkZWZpbmUgaW50bWluIC1pbnRtYXgKIAojZGVmaW5lIHBpIDMuMTQxNTkyNjUzNTg5NzkKIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbWFwIDxpbnQsIGludD4gYW5zW21heHNdOwoKc3RyaW5nIHM7CnZlY3RvciA8c3RyaW5nPiB2OwppbnQgbXJrW21heHNdOwoKc3RydWN0IHRyaWV7CglpbnQgZWRnZVsyNl07CglpbnQgcHJlZml4Owp9OwoKdHJpZSB0cmVlW21heHNdOwppbnQgY250OwoKdm9pZCBpbnNlcnQoaW50IG5vZGUsIGludCBpZHgpewoJaWYoaWR4PT1zLnNpemUoKSl7CgkJdHJlZVtub2RlXS5wcmVmaXgrKzsKCQlhbnNbaWR4XVt0cmVlW25vZGVdLnByZWZpeF0rKzsKCQlyZXR1cm4gOwoJfQoJaW50IHg9c1tpZHhdLSdhJzsKCXRyZWVbbm9kZV0ucHJlZml4Kys7CglhbnNbaWR4XVt0cmVlW25vZGVdLnByZWZpeF0rKzsKCWlmKHRyZWVbbm9kZV0uZWRnZVt4XSE9MCl7CgkJaW5zZXJ0KHRyZWVbbm9kZV0uZWRnZVt4XSwgaWR4KzEpOwoJfQoJZWxzZXsKCQkrK2NudDsKCQl0cmVlW25vZGVdLmVkZ2VbeF09Y250OwoJCWluc2VydCh0cmVlW25vZGVdLmVkZ2VbeF0sIGlkeCsxKTsKCX0KfQoKdm9pZCByZW1vdmUoaW50IG5vZGUsIGludCBpZHgpewoJaWYoaWR4PT1zLnNpemUoKSl7CgkgICAgYW5zW2lkeF1bdHJlZVtub2RlXS5wcmVmaXhdLS07CgkJdHJlZVtub2RlXS5wcmVmaXgtLTsKCQlyZXR1cm4gOwoJfQoJcmVtb3ZlKHRyZWVbbm9kZV0uZWRnZVtzW2lkeF0tJ2EnXSwgaWR4KzEpOwoJYW5zW2lkeF1bdHJlZVtub2RlXS5wcmVmaXhdLS07Cgl0cmVlW25vZGVdLnByZWZpeC0tOwoJaW50IHg9dHJlZVtub2RlXS5lZGdlW3NbaWR4XS0nYSddOwoJaWYodHJlZVt4XS5wcmVmaXg9PTApCgkJdHJlZVtub2RlXS5lZGdlW3NbaWR4XS0nYSddPTA7Cn0KCmludCBtYWluKCl7Cglpb3NiYXNlOwoJaW50IHEsdCxrLGwseDsKCWNpbj4+cTsKCWZvcihpbnQgaT0wOyBpPHE7IGkrKyl7CgkJY2luPj50OwoJCWlmKHQ9PTEpewoJCQljaW4+PnM7CgkJCXJldmVyc2Uocy5iZWdpbigpLCBzLmVuZCgpKTsKCQkJdi5wYihzKTsKCQkJbXJrW3Yuc2l6ZSgpXT0xOwoJCQlpbnNlcnQoMCwgMCk7CgkJfQoJCWVsc2UgaWYodD09Mil7CgkJCXYucGIoIiIpOwoJCQljaW4+Pms+Pmw7CgkJCWlmKGFuc1tsXVtrXSkKCQkJY291dDw8IllFUyI8PGVuZGw7CgkJCWVsc2UgY291dDw8Ik5PIjw8ZW5kbDsKCQl9CgkJZWxzZSB7CgkJCXYucGIoIiIpOwoJCQljaW4+Png7CgkJCWlmKCFtcmtbeF0pCgkJCWNvbnRpbnVlOwoJCQlzPXZbeC0xXTsKCQkJbXJrW3hdPTA7CgkJCXJlbW92ZSgwLCAwKTsKCQl9Cgl9CglyZXR1cm4gMDsKfQo=