#include using namespace std; #define ll long long #define mod 998244353LL ll f[1100010],ans; int m,q; char s[1100010]; inline int rd() { int x=0;char ch=getchar(); for (;ch<'0'||ch>'9';ch=getchar()); for (;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; return x; } inline void print(ll x) { static char s[233]; if (!x) { putchar('0');putchar('\n');return; } int tot=0; for (;x;x/=10) s[++tot]=x%10+'0'; for (;tot;tot--) putchar(s[tot]); putchar('\n'); } inline ll pls(const ll &x,const ll &y) { return (x+y>=1,x=x*x%mod) if (y&1) res=res*x%mod;return res; } inline void build(int o,int l,int r) { if (l==r) { f[o]=l;return; } int mid=(l+r)>>1; build(o<<1,l,mid); build(o<<1|1,mid+1,r); if (s[o]=='0') f[o]=pls(f[o<<1],f[o<<1|1]); else f[o]=f[o<<1]*f[o<<1|1]%mod; } inline void modify(int o,int l,int r,int x,int y) { if (l==r) { f[o]=y;return; } int mid=(l+r)>>1; if (x<=mid) modify(o<<1,l,mid,x,y); else modify(o<<1|1,mid+1,r,x,y); if (s[o]=='0') f[o]=pls(f[o<<1],f[o<<1|1]); else f[o]=f[o<<1]*f[o<<1|1]%mod; } inline void query(int o,int l,int r,int x) { if (l==r) return; int mid=(l+r)>>1; if (x<=mid) { query(o<<1,l,mid,x); if (s[o]=='1') ans=ans*f[o<<1|1]%mod; } else { query(o<<1|1,mid+1,r,x); if (s[o]=='1') ans=ans*f[o<<1]%mod; } } int main() { m=rd();q=rd(); scanf("%s",s+1); build(1,1,1<<(m-1)); while (q--) { int p=rd(); if (p==1) { int x=rd(),y=rd();modify(1,1,1<<(m-1),x,y); } else { int x=rd();ans=1; query(1,1,1<<(m-1),x); print(ans); } } return 0; }