#include #include #include #include #include #include #include using namespace std; #define For(i,l,r) for(int i=(l);i<=(r);i++) #define Down(i,r,l) for(int i=(r);i>=(l);i--) #define mset(a,x) memset(a,x,sizeof(a)) #define INF 0x7fffffff struct Trie { int w; Trie *next[26]; }*root; void Insert(char *s) { int len=strlen(s); Trie *p=root,*q; For(i,0,len-1) { int id=s[i]-'a'; if(p->next[id]==NULL) { q=new(Trie); p->next[id]=q; For(j,0,25) q->next[j]=NULL; q->w=0; } p=p->next[id]; p->w++; } } void Delete(char *s) { int len=strlen(s); Trie *p=root; For(i,0,len-1) { int id=s[i]-'a'; if(p->next[id]==NULL) { return; } p=p->next[id]; } int tmp=p->w; p=root; For(i,0,len-2) { int id=s[i]-'a'; p=p->next[id]; p->w-=tmp; } p->next[s[len-1]-'a']=NULL; } int Search(char *s) { int len=strlen(s); Trie *p=root; For(i,0,len-1) { int id=s[i]-'a'; if(p->next[id]==NULL||p->next[id]->w==0) { return 0; } p=p->next[id]; } return 1; } int main() { int T; scanf("%d",&T); root=new(Trie); For(i,0,25) root->next[i]=NULL; while(T--) { char tmp[10],s[35]; scanf("%s %s",tmp,s); if(tmp[0]=='i') { Insert(s); } else if(tmp[0]=='d') { Delete(s); } else if(tmp[0]=='s') { printf("%s\n",Search(s)?"Yes":"No"); } } return 0; }