#define MD 998244353 #define M _1 struct M;; #undef M using M=Matrix; M segtree_rh_merge(M a,M b){ return b*a; } M segtree_rh_apply(int,M a){ return a=1; } int segtree_rh_compose(int,int){ return 0; } { ll@n,@q; string@s; segtree_rht; t.malloc(n); t.setN(n,0,0); M m0(3,3),m1(3,3); m0=1; m0[0][1]=1; m1=1; m1[1][0]=1; m1[1][2]=1; rep(i,n){ t[i]=s[i]=='0'?m0:m1; } t.build(); rep(q){ int@y,@l--,@r; if(y==1){ t.change(l,r,0); }else{ M z=t.get(l,r); wt(z[0][2]+z[1][2]); } } }