#include #include #include #include #include #include #include #include #include using namespace std; int n; char op[10], str[40]; struct Node { int cnt; map next; Node() { cnt = 0; } } *root = new Node(); void insert() { int i, size = strlen(str); Node* cur = root; for (i = 0; i < size; ++i) { if (cur->next.count(str[i]) == 0) { Node* child = new Node(); cur->next[str[i]] = child; } cur = cur->next[str[i]]; cur->cnt++; } } int search() { int i, size = strlen(str); Node* cur = root; for (i = 0; i < size; ++i) { if (cur->next.count(str[i]) == 0) return 0; cur = cur->next[str[i]]; if (cur->cnt == 0) return 0; } return cur->cnt; } void mremove(Node* p) { for (map::iterator it = p->next.begin(), ie = p->next.end(); it != ie; ++it) { mremove(it->second); delete it->second; } p->next.clear(); } void mdelete() { int i, size = strlen(str), c = search(); if (c == 0) return; Node* cur = root; for (i = 0; i < size; ++i) { cur = cur->next[str[i]]; cur->cnt -= c; } mremove(cur); } int main() { scanf("%d", &n); while (n--) { scanf("%s %s", op, str); switch(op[0]) { case 'i': insert(); break; case 's': printf((search() > 0?"Yes\n": "No\n")); break; case 'd': mdelete(); } } }