#include #include #include #include #include #include #include #include using namespace std; #define ll long long #define mem(a,x) memset(a,x,sizeof(a)) struct node { node* l[26]; int num; }; node* newnode() { node* p = new node; p->num = 0; mem(p->l,0); return p; } void Insert(char* s,node* root) { node* cur = root; int len = strlen(s); for(int i = 0; i < len; i++) { if(cur->l[s[i]-'a'] == 0) cur->l[s[i]-'a'] = newnode(); cur = cur->l[s[i]-'a']; cur -> num++; } } void Delete(char *s,node* root) { node* cur = root; int t; int len = strlen(s); for(int i = 0; i < len; i++) { if(cur->l[s[i]-'a'] == 0) return; cur = cur->l[s[i]-'a']; if((cur->num) == 0) return; } t = cur->num; for(int i = 0;i < 26;i++) cur->l[i] = 0; cur = root; for(int i = 0; i < len; i++) { cur = cur->l[s[i]-'a']; cur->num -= t; } } bool query(char* s,node* root) { node* cur = root; int len = strlen(s); for(int i = 0; i < len; i++) { if(cur->l[s[i]-'a'] == 0) return false; cur = cur->l[s[i]-'a']; if(cur->num == 0) return false; } return true; } int main() { int n; scanf("%d",&n); node* root = newnode(); for(int i = 0; i < n; i++) { char op[10]; char s[35]; scanf("%s%s",op,s); if(op[0] == 'i') Insert(s,root); if(op[0] == 'd') Delete(s,root); if(op[0] == 's') { if(query(s,root)) printf("Yes\n"); else printf("No\n"); } } return 0; }