#include #include #include #include #include #include using namespace std; typedef long long int ll; #define x first #define y second void generate(string &query, int i, vector &results) { if (i==query.size()) { results.push_back(query); return; } if (query[i] == '?') { for (char c='0'; c<='9'; c++){ query[i] = c; generate(query, i+1, results); } query[i] = '?'; } else { generate(query, i+1, results); } } int main() { int n, q; cin >> n; string word, query; map m; set words; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); for (int i=0; i> word; for (int j=0; j<=word.size(); j++) { for (int k=j; k<=word.size(); k++){ //m[word.substr(0, j) + "*" + word.substr(k)].push_back(word); m[word.substr(0, j) + "*" + word.substr(k)]++; } } words.insert(word); } cin >> q; for (int i=0; i> query; vector results; generate(query, 0, results); int result = 0; if (query.find('*') == string::npos) { for (const string& s: results) { result += words.count(s); } } else { for (const string& s: results) { result += m[s]; } } cout << result << '\n'; } }