#pragma warning (disable:4996) #include #include #include #include #include #include #include #include using namespace std; char str[35],op[10]; struct thanks{ int son[27],cnt,lazy,sum; }p[3000005]; int vid; bool find(int x,int strid){ if(str[strid]=='\0'){ return p[x].cnt+p[x].sum; } int nt=str[strid]-'a'; if(p[x].son[nt]){ if(p[x].lazy){ for(int i=0;i<=25;i++){ if(p[x].son[i]){ int tt=p[x].son[i]; p[tt].cnt=0; p[tt].sum=0; p[tt].lazy=1; } } p[x].lazy=0; } bool vans=find(p[x].son[nt],strid+1); p[x].sum=p[x].cnt; for(int i=0;i<=25;i++){ if(p[x].son[i]){ int tt=p[x].son[i]; p[x].sum+=p[tt].sum; } } return vans; } else return 0; } void delete_point(int x,int strid){ if(str[strid]=='\0'){ p[x].lazy=1; p[x].cnt=0; p[x].sum=0; return; } int nt=str[strid]-'a'; if(p[x].son[nt]){ if(p[x].lazy){ for(int i=0;i<=25;i++){ if(p[x].son[i]){ int tt=p[x].son[i]; p[tt].cnt=0; p[tt].sum=0; p[tt].lazy=1; } } p[x].lazy=0; } delete_point(p[x].son[nt],strid+1); p[x].sum=p[x].cnt; for(int i=0;i<=25;i++){ if(p[x].son[i]){ int tt=p[x].son[i]; p[x].sum+=p[tt].sum; } } } } bool search(){ int n=strlen(str+1); return find(0,1); } void insert(int x,int strid){ if(str[strid]=='\0'){ p[x].cnt++; p[x].sum++; return; } int nt=str[strid]-'a'; if(!p[x].son[nt]){ p[x].son[nt]=++vid; p[vid].cnt=p[vid].lazy=p[vid].sum=0; memset(p[vid].son,0,sizeof(p[vid].son)); } if(p[x].son[nt]){ if(p[x].lazy){ for(int i=0;i<=25;i++){ if(p[x].son[i]){ int tt=p[x].son[i]; p[tt].cnt=0; p[tt].sum=0; p[tt].lazy=1; } } p[x].lazy=0; } insert(p[x].son[nt],strid+1); p[x].sum=p[x].cnt; for(int i=0;i<=25;i++){ if(p[x].son[i]){ int tt=p[x].son[i]; p[x].sum+=p[tt].sum; } } } } int main(){ int i,j,n,m; while(scanf("%d",&n)!=EOF){ for(i=1;i<=n;i++){ scanf("%s%s",op+1,str+1); if(op[1]=='s'){ printf("%s\n",search() ?"Yes":"No"); } else if(op[1]=='d'){ delete_point(0,1); } else{ insert(0,1); } } } //system("pause"); return 0; }