#include #include #include #include using namespace std; typedef struct node { int num; node * nexts[26]; }trienode; int n; trienode *root; void insert(char *s) { trienode *r=root,*h; int len=strlen(s); for(int i=0;inexts[buf]==NULL) { h=new node; for(int j=0;j<26;j++) h->nexts[j]=NULL; h->num=1; r->nexts[buf]=h; r=h; } else { r=r->nexts[buf]; r->num++; } } } void searchs(char *s) { trienode *r=root; int len=strlen(s); for(int i=0;inexts[buf]==NULL||r->nexts[buf]->num==0) { printf("No\n"); return; } else r=r->nexts[buf]; } if(r->num>0) printf("Yes\n"); else printf("No\n"); return ; } void del(char *s) { trienode *r=root; int len=strlen(s); int sum=0; for(int i=0;inexts[buf]==NULL) return ; else { if(i==len-1) { sum=r->nexts[buf]->num; r->nexts[buf]=NULL; } else r=r->nexts[buf]; } } r=root; for(int i=0;inexts[buf]; r->num-=sum; } } void delet(trienode *r) { for(int i=0;i<26;i++) { if(r->nexts[i]!=NULL) delet(r->nexts[i]); } free(r); } int main() { cin>>n; root=new node; root->num=0; for(int i=0;i<26;i++) root->nexts[i]=NULL; while(n--) { char s1[10],s2[40]; scanf("%s%s",s1,s2); if(s1[0]=='i') insert(s2); else if(s1[0]=='s') searchs(s2); else if(s1[0]=='d') del(s2); } delet(root); }