#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define ll int
#define nl "\n"
#define all(v) v.begin(),v.end()
#define baraa ios_base::sync_with_stdio(false);cin.tie(NULL);
using namespace std;
int main() {
baraa
ll m, q;
cin >> m >> q;
ll n = (1LL << m);
vector<ll> dp(n), dp2(n), v(n);
for (ll i = 0; i < n; i++) {
char c;
cin >> c;
dp[i] = dp2[i] = v[i] = c - '0';
}
for (ll bit = 0; bit < m; bit++)
for (ll msk = 0; msk < n; msk++) {
if (msk >> bit & 1)dp[msk] += dp[msk ^ (1LL << bit)];
else dp2[msk] += dp2[msk ^ (1LL << bit)];
}
while (q--) {
string s;
cin >> s;
reverse(all(s));
ll a = 0, b = 0, c = 0, res = 0;
for (ll i = 0; i < m; i++) {
a += (1LL << i) * (s[i] == '0');
b += (1LL << i) * (s[i] == '1');
c += (1LL << i) * (s[i] == '?');
}
ll mni = min({__builtin_popcountll(a), __builtin_popcountll(b), __builtin_popcountll(c)});
if (mni == __builtin_popcountll(a)) {
for (ll msk = a; msk; msk = (msk - 1) & a)
res += (__builtin_popcountll(msk) & 1 ? -1 : 1) * dp2[b | msk];
res += dp2[b];
} else if (mni == __builtin_popcountll(b)) {
for (ll msk = b; msk; msk = (msk - 1) & b)
res += (__builtin_popcountll(msk) & 1 ? -1 : 1) * dp[(b ^ msk) | c];
res += dp[c | b];
} else {
for (ll msk = c; msk; msk = (msk - 1) & c)
res += v[b | msk];
res += v[b];
}
cout << res << nl;
}
return 0;
}