#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <set>
#ifdef XLor
#define dbg(args...) cout << #args << " -> ", err(args)
void err() { std::cout  << std::endl; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
#else
#define dbg(...)
#endif
using ll = long long;
using namespace std;
const int N = 6e6 + 10;
const int Mod = 1e9 + 7;
char s[N];
int a[N],k,val[N],tag[N];
void update(int rt){
    if (s[tag[rt]] == '0')  val[rt] = val[rt << 1];
    else if (s[tag[rt]] == '1') val[rt] = val[rt << 1 | 1];
    else val[rt] = val[rt << 1] + val[rt << 1 | 1];
}
void build(int rt,int l,int r){
    if (l == r){
        val[rt] = 1;
        return;
    }
    int mid = (l + r) >> 1;
    build(rt << 1,l,mid);
    build(rt << 1 | 1,mid + 1,r);
    update(rt);
}
int Num[N];
int main(void){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> k;
    cin >> s + 1;
    int cnt = 0,q,len = strlen(s + 1);
    for(int i = len,t = 1; i >= 1; t = t * 2){
        for(int j = i - t + 1; j <= i; j++){
            tag[++cnt] = j;
            Num[j] = cnt;
        }
        i -= t;
    }
    build(1,1,len + 1);
    cin >> q;
    for(int i = 1; i <= q; i++){
        int pos;
        char s1[2];
        cin >> pos >> s1;
        s[pos] = s1[0];
        int Now = Num[pos];
            if (s1[0] == '0') val[Now] = val[Now << 1];
            else if (s1[0] == '1') val[Now] = val[Now << 1 | 1];
            else val[Now] = val[Now << 1] + val[Now << 1 | 1];
        Now = Now >> 1;
        for(;Now; Now >>=1) update(Now);
        cout << val[1] << "\n";
    }
}