#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5,mod=998244353;
int T,n,dp[N][2];
char a[N];
struct matrix{
int a[4][4];
matrix(){
memset(a,0,sizeof(a));
}
}mul[N];
matrix operator*(matrix a,matrix b){
matrix c;
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
for(int k=1;k<=3;k++){
c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
}
}
}
return c;
}
signed main(){
cin>>n>>T;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]=='0'){
mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][2]=mul[i].a[3][3]=1;
}
if(a[i]=='1'){
mul[i].a[1][1]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
}
if(a[i]=='?'){
mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
}
}
for(int i;T--;){
char x;
cin>>i>>x,a[i]=x;
if(a[i]=='0'){
mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][2]=mul[i].a[3][3]=1;
}
if(a[i]=='1'){
mul[i].a[1][1]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
}
if(a[i]=='?'){
mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
}
matrix ret;
ret.a[3][1]=1;
for(int j=1;j<=n;j++){
ret=ret*mul[j];
}
cout<<(ret.a[1][1]+ret.a[2][1])%mod<<'\n';
}
}