/* * @Author: NanoApe * @Date: 2016-07-20 22:18:25 * @Last Modified by: admin * @Last Modified time: 2019-08-24 16:38:06 */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i, l, r) for(int i=l; i<=r; i++) #define dow(i, l, r) for(int i=l; i>=r; i--) #define fi first #define se second #define pb push_back #define mp make_pair #define clr(x, c) memset(x,c,sizeof(x)) typedef long long ll; typedef unsigned long long ull; typedef pair Pii; inline int read() { int x=0,f=0; char ch=getchar(); while (ch<'0' || '9'= (1<<(n-1))) c[o] = o-(1<<(n-1))+1; else if (str[o]=='0') c[o] = (dfs(o*2) + dfs(o*2+1)) % Q; else c[o] = 1LL * dfs(o*2) * dfs(o*2+1) % Q; return c[o]; } int main() { n = read(), m = read(); scanf("%s", str+1); dfs(1); while (m--) { int ty = read(); int o = read()-1+(1<<(n-1)); if (ty == 1) { c[o] = read(); while (o>>1) { o = (o>>1); if (str[o]=='0') c[o] = (c[o*2] + c[o*2+1]) % Q; else c[o] = 1LL * c[o*2] * c[o*2+1] % Q; } } else { int ans = 1; while (o>>1) { if (str[o>>1] != '0') ans = 1LL * ans * c[o^1] % Q; o = (o>>1); } printf("%d\n", ans); } } return 0; }