func_code_string: #include <bits/stdc++.h>   using std::cerr;   using std::cin;   using std::cout;   using std::endl;   using std::list;   using std::map;   using std::max;   using std::min;   using std::pair;   using std::set;   using std::sort;   using std::string;   using std::swap;   using std::vector;   const int MAXN = 100005;   const long long INF = 100000000009;   const long long MOD = (long long)1e9 + 7;   bool used[MAXN];   bool cnt[MAXN][50];   int main() {     std::ios_base::sync_with_stdio(false);     std::cin.tie(nullptr);     int n;     cin >> n;     string sec;     cin >> sec;     for (int i = 0; i < n; ++i) {       if (sec[i] !=  * ) {         used[(int)sec[i]] = true;       }     }     int m;     cin >> m;     vector<string> needed;     for (int i = 0; i < m; ++i) {       string s;       cin >> s;       bool flag = true;       for (int j = 0; j < n; ++j) {         if (sec[j] ==  * ) {           if (used[(int)s[j]]) {             flag = false;             break;           }         } else if (sec[j] != s[j]) {           flag = false;           break;         }       }       if (flag) {         needed.push_back(s);       }     }     for (int j = 0; j < needed.size(); ++j) {       for (int i = 0; i < n; ++i) {         if (sec[i] ==  * ) {           cnt[j][(int)needed[j][i] -  a ] = true;         }       }     }     int ans = 0;     for (int i = 0; i <= (int) z  - (int) a ; ++i) {       bool flag = true;       for (int j = 0; j < needed.size(); ++j) {         if (!cnt[j][i]) {           flag = false;         }       }       if (flag) {         ++ans;       }     }     cout << ans;     return 0;   }   