#include #include #include #include #include #include #include #include #include #include #include #include typedef long long llong; const int MAXN = 50000 + 10; const int MAXLEN = 15e5 + 10; const int ALPHABET = 26; const int MOD = 1e9 + 7; const int INTINF = 1e9; const llong INF = 4e18; const int MAXLOG = 17; const int BASE = 27; int n, q; int globalLen; llong prefix[MAXLEN]; llong suffix[MAXLEN]; std::pair both[MAXLEN]; int countLess(llong a[], llong val) { int l = 0, r = globalLen + 1, mid; while (l < r - 1) { mid = (l + r) / 2; if (a[mid] <= val) l = mid; else r = mid; } return l; } int countEqual(llong a[], llong val) { return countLess(a, val) - countLess(a, val - 1); } int countLessP(std::pair a[], std::pair val) { int l = 0, r = globalLen + 1, mid; while (l < r - 1) { mid = (l + r) / 2; if (a[mid] <= val) l = mid; else r = mid; } return l; } int countEqualP(std::pair a[], std::pair val) { return countLessP(a, val) - countLessP(a, {val.first, val.second - 1}); } void solve() { for (int i = 1 ; i <= n ; ++i) { std::string s; std::cin >> s; llong prefixHash = 0, suffixHash = 0; for (int len = 1 ; len <= s.size() ; ++len) { prefixHash = prefixHash * BASE + s[len - 1] - 'a' + 1; suffixHash = suffixHash * BASE + s[s.size() - len] - 'a' + 1; globalLen++; prefix[globalLen] = prefixHash; suffix[globalLen] = suffixHash; both[globalLen] = {prefixHash, suffixHash}; } } std::sort(prefix + 1, prefix + 1 + globalLen); std::sort(suffix + 1, suffix + 1 + globalLen); std::sort(both + 1, both + 1 + globalLen); std::cin >> q; for (int i = 1 ; i <= q ; ++i) { std::string ask; std::cin >> ask; llong prefixHash = 0, suffixHash = 0; for (int len = 1 ; len <= ask.size() ; ++len) { prefixHash = prefixHash * BASE + ask[len - 1] - 'a' + 1; suffixHash = suffixHash * BASE + ask[ask.size() - len] - 'a' + 1; } std::cout << countEqual(prefix, prefixHash) + countEqual(suffix, suffixHash) - countEqualP(both, {prefixHash, suffixHash}) << '\n'; } } void input() { std::cin >> n; } void fastIOI() { freopen("wordstone.in", "r", stdin); freopen("wordstone.out", "w", stdout); std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); return 0; } /* 6 6 3 9 10 12 8 1 1 2 8 6 6 3 9 10 12 8 5 1 2 8 2 7 1 2 8 3 1 9 1 1 15 6 6 3 9 10 12 8 3 1 2 8 2 7 1 2 8 3 1 9 1 1 15 */