#include using namespace std; using ll = long long; using ld = long double; #define rep(i, a, b) fo(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef pair pii; typedef vector vi; void ProGamerMove() { int n; cin >> n; const int D = 9; unordered_map c; vector>> cnt(D, vector>(D)); vector>> cnt2(D, vector>(D)); vector a(n); for (auto& s : a) { cin >> s; c[s]++; for (int i = 0; i < D; ++i) for (int j = D - 1; j >= i; --j) ++cnt[i][j][s.substr(0, i) + s.substr(j + 1, D - j - 1)]; for (int i = 0; i < D; ++i) for (int j = D - 1; j >= i; --j) { ++cnt2[i][j][s.substr(0, i) + s.substr(i + 1, max(0, j - i - 1)) + s.substr(j + 1, D - j - 1)]; } } int q; cin >> q; while (q--) { string s; cin >> s; string mys = ""; int a = -1, b = -1; for (int i = 0; i < s.size(); ++i) { if (s[i] == '?' && a == -1) a = b = i; else if (s[i] == '?') b = i; else if (s[i] == '*') a = i; else mys += s[i]; } if (count(s.begin(), s.end(), '?')) { cout << cnt2[a][b][mys] << '\n'; } else if (count(s.begin(), s.end(), '*')) { b = D - (mys.size() - a) - 1; cout << cnt[a][b][mys] << '\n'; } else { cout << c[s] << '\n'; } } } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int tc = 1; // cin >> tc; while(tc--) ProGamerMove(); }