#include <bits/stdc++.h>
// Author: Kazuki_Will_Win_VOI_8703
#define fi first
#define se second
#define pii pair<int, int>
#define int long long
#define all(a) a.begin(), a.end()
using namespace std;
const int mn = 1e6 + 5, lg2 = 20, mbit = (1 << 20) + 1, mm = 5e3 + 5, mod = 1e6 + 3, inf = 1e18;
int l, q, a[mn], small[mn], big[mn];
string s;
void solve(){
	cin >> l >> q;
	cin >> s;
	for(int i = 0; i < (1 << l); i++) a[i] = small[i] = big[i] = s[i] - '0';
	for(int i = 0; i < l; i++){
		for(int mask = 0; mask < (1 << l); mask ++){
			if(mask & (1 << i)) small[mask] += small[mask ^ (1 << i)]; 
			else big[mask] += big[mask ^ (1 << i)];
		}	
	}
	while(q--){
		string s; cin >> s;
		reverse(all(s));
		int cnt0 = 0, mask0 = 0;
		int cnt1 = 0, mask1 = 0;
		int cnt_ = 0, mask_ = 0;
		for(int i = 0; i < l; i++){
			if(s[i] == '0') cnt0 ++, mask0 |= (1 << i);
			if(s[i] == '1') cnt1 ++, mask1 |= (1 << i);
			if(s[i] == '?') cnt_ ++, mask_ |= (1 << i);
		}
		if(cnt_ <= 6){
			int res = a[mask1];
			for(int sub = mask_; sub; sub = (sub - 1) & mask_){
				res += a[mask1 | sub];
				// cout << (mask1 | sub) << ' ' << a[mask1 | sub] << '\n';
			}
			cout << res << '\n';
		}
		// BHLT
		else if(cnt1 <= 6){
			int res = small[mask_] * (__builtin_popcount(mask1) % 2 ? - 1 : 1);
			for(int sub = mask1; sub; sub = (sub - 1) & mask1){
				int cnt = __builtin_popcount(sub ^ mask1);
				if(cnt % 2 == 1) res -= small[sub | mask_];
				else res += small[sub | mask_];
			}
			cout << res << '\n';
		}
		else if(cnt0 <= 6){
			int res = big[mask1];
			for(int sub = mask0; sub; sub = (sub - 1) & mask0){
				int cnt = __builtin_popcount(sub);
				if(cnt % 2 == 1) res -= big[sub | mask1];
				else res += big[sub | mask1];
			}
			cout << res << '\n';
		}
	}
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t = 1;
    // cin >> t;
    while(t--){
        solve();
    }
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |