#include #include #include #include #include using namespace std; #include template struct Matrix{ array,N>dat; array&operator[](int i){return dat[i];} const array&operator[](int i)const{return dat[i];} Matrix(){for(int i=0;i>=1)if(n&1)res=res*a; return res; } }; using mint=atcoder::modint998244353; using mat=Matrix; mat op(mat a,mat b){return a*b;} mat e(){return mat::eye();} setrest; mat U,A,B; int N,Q; string S; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); U=mat::eye(); A[0][2]=1; A[1][1]=1; A[2][2]=2;A[2][0]=-1; B[0][0]=1; B[1][2]=1; B[2][2]=2;B[2][1]=-1; cin>>N>>Q>>S; vectorinit(N); for(int i=0;iseg(init); for(;Q--;) { int T,l,r;cin>>T>>l>>r;l--; if(T==1) { auto it=rest.lower_bound(l); while(it!=rest.end()&&*it