#include #include #include #include #include #include using namespace std; #define ll long long typedef struct node { int num; node *next[30]; node() { memset(next, 0, sizeof(next)); num = 0; } }Trie; char op[32], s[32]; void Insert(node *root, char *s) { node *p = root; for(int i = 0; s[i]; i++) { int x = s[i] - 'a'; if(p -> next[x] == NULL) p -> next[x] = new node; p = p -> next[x]; p -> num++; } } int Search(node *root, char *s) { node *p = root; for(int i = 0; s[i]; i++) { int x = s[i] - 'a'; if(p -> next[x] == NULL) return 0; p = p -> next[x]; } return p -> num; } void Delete(node *root, char *s, int cnt) { node *p = root; for(int i = 0; s[i]; i++) { int x = s[i] - 'a'; p = p -> next[x]; p -> num -= cnt; } for(int i = 0; i < 30; i++) p -> next[i] = 0; } int main() { int n; scanf("%d", &n); Trie *root = new node; for(int i = 0; i < n; i++) { scanf("%s %s", op, s); switch(op[0]) { case 'i': Insert(root, s); break; case 's': if(Search(root, s)) puts("Yes"); else puts("No"); break; case 'd': if(Search(root, s)) Delete(root, s, Search(root, s)); break; } } }