#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef pair pii; #define PB push_back #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define calm (l+r)>>1 const int INF=(int)1e9+7; char a[10],b[33]; struct node{ int cnt; int next[26]; }tree[3300000]; int vis=0; void insert(char s[]){ int rt=0; for(int i=0;s[i];i++){ ++tree[rt].cnt; if(!tree[rt].next[s[i]-'a']){ rt=tree[rt].next[s[i]-'a']=++vis; } else{ rt=tree[rt].next[s[i]-'a']; } } ++tree[rt].cnt; } bool search(char s[]){ int rt=0; for(int i=0;s[i];i++){ if(!tree[rt].next[s[i]-'a'])return false; rt=tree[rt].next[s[i]-'a']; if(!tree[rt].cnt)return false; } return true; } void work(int rt){ for(int i=0;i<26;i++){ if(tree[rt].next[i]) { work(tree[rt].next[i]); tree[rt].next[i]=0; } } } void clear(char s[]){ int rt=0,i; for(i=0;s[i];i++) { if (!tree[rt].next[s[i] - 'a'])return; if (s[i+1]) { rt = tree[rt].next[s[i] - 'a']; } } int t=tree[rt].next[s[i-1]-'a']; tree[rt].next[s[i-1]-'a']=0; rt=t; int sum=tree[rt].cnt; work(rt); rt=0; for(int i=0;s[i];i++){ tree[rt].cnt-=sum; if (!tree[rt].next[s[i] - 'a'])return; rt = tree[rt].next[s[i] - 'a']; } tree[rt].cnt-=sum; } int main() { //freopen("/home/xt/code/acm/input.txt","r",stdin); int n;scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s%s",a,b); if(a[0]=='i'){ insert(b); } else if(a[0]=='s'){ if(!search(b)){ printf("No\n"); } else printf("Yes\n"); } else if(a[0]=='d'){ clear(b); } } //printf("[Run in %.1fs]\n",(double)clock()/CLOCKS_PER_SEC); return 0; }