#include using namespace std; typedef signed long long ll; #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define FORR2(x,y,arr) for(auto& [x,y]:arr) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) template bool chmax(T &a, const T &b) { if(a bool chmin(T &a, const T &b) { if(a>b){a=b;return 1;}return 0;} //------------------------------------------------------- int N; int S[1<<18]; ll dp[1<<9][1<<9]; ll p10[2<<18]; ll p2[2<<18]; ll p11[2<<18]; const ll mo=998244353; void update(int n) { n=(n>>9)<<9; int mask; FOR(mask,1<<9) { ll ret=0; int i; FOR(i,1<<9) { int x=(i^mask); (ret+=S[n+(i^mask)]*p11[(1<<9)-1-i])%=mo; } dp[n>>9][mask]=ret; } } void solve() { int i,j,k,l,r,x,y; string s; p2[0]=p10[0]=p11[0]=1; FOR(i,(1<<18)+(1<<17)) { p2[i+1]=p2[i]*2%mo; p10[i+1]=p10[i]*10%mo; p11[i+1]=p11[i]*11%mo; } cin>>N>>s; FOR(i,1<>Q; while(Q--) { cin>>i; if(i==1) { cin>>x>>y; S[x]=y; if(N>9) update(x); } else { int L,R,X; cin>>L>>R>>X; R++; int len=0; ll ret=0; while((L&(1<<9))&&L>9][X&((1<<9)-1)]*p2[len])%mo; L+=1<<9; len++; } while(L