// Problem: D. Playoff Tournament
// Contest: Codeforces - Educational Codeforces Round 110 (Rated for Div. 2)
// URL: http://codeforces.com/contest/1535/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef unsigned long long ull;

#define x first
#define y second
#define sf scanf
#define pf printf
#define PI acos(-1)
#define inf 0x3f3f3f3f
#define lowbit(x) ((-x)&x)
#define mem(a,x) memset(a,x,sizeof(a))
#define rep(i,n) for(int i=0;i<(n);++i)
#define repi(i,a,b) for(int i=int(a);i<=(b);++i)
#define repr(i,b,a) for(int i=int(b);i>=(a);--i)
#define debug(x) cout << #x << ": " << x << endl;

const int MOD = 998244353;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
const int dx[] = {0, 1, -1, 0, 0};
const int dy[] = {0, 0, 0, 1, -1};
const int dz[] = {1, -1, 0, 0, 0, 0 };
int day[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

ll n,m,ans[maxn];
char str[maxn],s[maxn];
void build(ll num,ll l,ll r){
	if(l==r){
		ans[num]=1;
		return ;
	}
	ll mid=(l+r)/2;
	build(num*2,l,mid);
	build(num*2+1,mid+1,r);
	
	if(s[num]=='0') ans[num]=ans[num*2+1];
	else if(s[num]=='1') ans[num]=ans[num*2];
	else if(s[num]=='?') ans[num] = ans[num*2]+ans[num*2+1];
}
void solve()
{	
	scanf("%lld%s",&n,str+1);
	ll len=(1<<n);
	for(int i=1;i<len;i++){
		s[i]=str[len-i];
	}
	build(1,1,len);
	scanf("%lld",&m);
	for(int i=1;i<=m;i++){
		ll x;
		char ch[3];
		//cin>>x>>ch;
		scanf("%lld%s",&x,ch+1);
		x=len-x;
		s[x]=ch[1];
		while(x){
			if(s[x]=='0') ans[x]=ans[x*2+1];
			else if(s[x]=='1') ans[x]=ans[x*2];
			else ans[x]=ans[x*2]+ans[x*2+1];
			x=x/2;
		}
		cout<<ans[1]<<endl;
	}
	
}

int main()
{
    ll t = 1;
    ///scanf("%lld",&t);
    while(t--)
    {
        solve();
    }
    return 0;
}



 