func_code_string: #include <bits/stdc++.h>   using namespace std;   void bktk(int i, char *s, int val, int &ans, vector<int> &cnt) {     if (!s[i]) {       ans += cnt[val];       return;     }     val *= 3;     if (s[i] ==  A ) {       bktk(i + 1, s, val, ans, cnt);       bktk(i + 1, s, val + 1, ans, cnt);     }     if (s[i] ==  a ) {       bktk(i + 1, s, val + 2, ans, cnt);     }     if (s[i] ==  O ) {       bktk(i + 1, s, val, ans, cnt);     }     if (s[i] ==  o ) {       bktk(i + 1, s, val + 1, ans, cnt);       bktk(i + 1, s, val + 2, ans, cnt);     }     if (s[i] ==  X ) {       bktk(i + 1, s, val, ans, cnt);       bktk(i + 1, s, val + 2, ans, cnt);     }     if (s[i] ==  x ) {       bktk(i + 1, s, val + 1, ans, cnt);     }   }   int main() {     int w, n, m;     scanf( %d %d %d , &w, &n, &m);     vector<int> f(1 << w, 0);     for (int i = 1; i <= n; i++) {       int x;       scanf( %d , &x);       f[x]++;     }     vector<int> b3(1 << w, 0);     for (int i = 0; i < (1 << w); i++) {       for (int k = w - 1; k >= 0; k--) {         b3[i] = b3[i] * 3 + ((i >> k) & 1);       }     }     vector<int> cnt(531441, 0);     for (int i = 0; i < (1 << w); i++) {       for (int j = 0; j < (1 << w); j++) {         cnt[b3[i] + b3[j]] += f[i] * f[j];       }     }     while (m--) {       char s[14];       scanf( %s , s);       int ans = 0;       bktk(0, s, 0, ans, cnt);       printf( %d n , ans);     }   }   