#include <bits/stdc++.h>
using namespace std;
#define pc(x) __builtin_popcount(x)
const int MAX_L = 21;
const int MAX_MASK = 1 << MAX_L;
int l, q, c[MAX_MASK], subs[MAX_MASK], supers[MAX_MASK];
string s;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin >> l >> q >> s;
for (int i = 0; i < (1 << l); ++i) {
c[i] = s[i] - '0';
subs[i] = supers[i] = c[i];
}
for (int j = 0; j < l; ++j) {
for (int i = 0; i < (1 << l); ++i) {
if ((i >> j) & 1) {
subs[i] += subs[i ^ (1 << j)];
} else {
supers[i] += supers[i ^ (1 << j)];
}
}
}
while (q--) {
string t;
cin >> t;
int ones = 0, zeroes = 0, nones = 0, cnt[] = {0, 0, 0};
for (int i = 0; i < l; ++i) {
if (t[i] == '1') {
ones |= 1 << (l - 1 - i);
++cnt[0];
} else if (t[i] == '0') {
zeroes |= 1 << (l - 1 - i);
++cnt[1];
} else {
nones |= 1 << (l - 1 - i);
++cnt[2];
}
}
int ans = 0;
if (cnt[0] <= 6) {
int base = ones | nones;
ans = subs[base];
for (int i = ones; i > 0; i = (i - 1) & ones) {
if (pc(i) & 1) {
ans -= subs[base ^ i];
} else {
ans += subs[base ^ i];
}
}
} else if (cnt[1] <= 6) {
int base = ones;
ans = supers[base];
for (int i = zeroes; i > 0; i = (i - 1) & zeroes) {
if (pc(i) & 1) {
ans -= supers[base ^ i];
} else {
ans += supers[base ^ i];
}
}
} else {
int base = ones;
ans = c[base];
for (int i = nones; i > 0; i = (i - 1) & nones) {
ans += c[base ^ i];
}
}
cout << ans << '\n';
}
}