#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <utility>
#include <bitset>
#include <climits>
#include <set>
#include <map>
#include <iomanip>
#include <queue>
#include <cstring>
using namespace std;
#define ll long long
#define pll pair<ll,ll>
#define F first
#define S second
#define pll pair<ll,ll>
#define mp make_pair
#define pb push_back
ll arr[262144]={0};

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    ll pow[20]={0};
    pow[0]=1;
    for(int i=1;i<20;i++) pow[i]=pow[i-1]*2;
    ll k;
    cin >> k;
    string s;
    cin >> s;
    for(int i=0;i<pow[k-1];i++){
        arr[i]=1;
        if(s[i]=='?') arr[i]++;
    }
    ll cool,dool;
    for(int i=pow[k-1];i<pow[k]-1;i++){
        cool=floor(log2(pow[k]-i-1));
        dool=pow[k]-pow[cool+2]+2*(i-(pow[k]-pow[cool+1]));
        if(s[i]=='0') arr[i]=arr[dool];
        else if(s[i]=='1') arr[i]=arr[dool+1];
        else arr[i]=arr[dool]+arr[dool+1];
    }
    ll q,a;
    cin >> q;
    while(q--){
        cin >> a;
        a--;
        cin >> s[a];
        if(a<pow[k-1]){
            arr[a]=1;
            if(s[a]=='?') arr[a]++;
            cool=floor(log2(pow[k]-a-1));
            a=((a-(pow[k]-pow[cool+1]))/2)+(pow[k]-pow[cool]);
        }
        cool=1;
        while(cool>0){
            cool=floor(log2(pow[k]-a-1));
            dool=pow[k]-pow[cool+2]+2*(a-(pow[k]-pow[cool+1]));
            if(s[a]=='0') arr[a]=arr[dool];
            else if(s[a]=='1') arr[a]=arr[dool+1];
            else arr[a]=arr[dool]+arr[dool+1];
            a=((a-(pow[k]-pow[cool+1]))/2)+(pow[k]-pow[cool]);
        }
        //for(int i=0;i<pow[k];i++) cout << arr[i] << " ";cout << endl;
        cout << arr[pow[k]-2] << endl;
    }
    return 0;
}