#include #include int const MAXL = 13; int const MAXW = 13; int const MAXN = 111; struct Right { char user[MAXL]; char mask[(MAXL + 1) * MAXW]; }; int n; Right r[MAXN]; bool is_ok(Right const & u, Right const & r) { if (strcmp(u.user, r.user) != 0) return false; char const * us = u.mask; char const * rs = r.mask; while (*us && *rs) { if (*rs == '*') { while (*us && *us != '/') ++us; ++rs; } else { if (*us != *rs) return false; while (*us && *rs && *us == *rs) { ++us; ++rs; } } } return !*us && !*rs; } bool is_ok(Right const & c) { for (int i = 0; i < n; ++i) if (is_ok(c, r[i])) return true; return false; } int main() { //freopen("in.txt", "rt", stdin); scanf("%d", &n); for (int i = 0; i< n; ++i) scanf("%s %s", r[i].user, r[i].mask); int m; scanf("%d", &m); for (int q = 1; q <= m; ++q) { Right c; scanf("%s %s", c.user, c.mask); printf("%s\n", is_ok(c) ? "YES" : "NO"); } return 0; }