#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;} //------------------------------------------------------- const ll mo=998244353; template class SegTree_sum { public: vector val,sum; SegTree_sum(){val.resize(NV*2); sum.resize(NV*2,-1);}; V getval(int x,int y,int l=0,int r=NV,int k=1) { if(r<=x || y<=l) return 0; if(x<=l && r<=y) return sum[k]; if(val[k]>=0) return val[k]*(min(y,r)-max(l,x))%mo; return (getval(x,y,l,(l+r)/2,k*2)+getval(x,y,(l+r)/2,r,k*2+1))%mo; } void update(int x,int y,int v,int l=0,int r=NV,int k=1) { if(r<=x || y<=l) return; if(x<=l&&r<=y) { val[k]=v; sum[k]=1LL*v*(r-l)%mo; } else { if(val[k]!=-1) { update(x,y,val[k],l,(l+r)/2,k*2); update(x,y,val[k],(l+r)/2,r,k*2+1); val[k]=-1; } update(x,y,v,l,(l+r)/2,k*2); update(x,y,v,(l+r)/2,r,k*2+1); sum[k]=(sum[2*k]+sum[2*k+1])%mo; } } }; SegTree_sum st[5]; int N,Q; ll modpow(ll a, ll n = mo-2) { ll r=1;a%=mo; while(n) r=r*((n%2)?a:1)%mo,a=a*a%mo,n>>=1; return r; } void solve() { int i,j,k,l,r,x,y; string s; cin>>N; FOR(i,N) { ll v,w=1; cin>>v; for(j=1;j<=4;j++) { w=w*v%mo; st[j].update(i,i+1,w); } } cin>>Q; while(Q--) { int U,V,W; cin>>i>>U>>V>>W; U--,V--,W--; if(U>V) swap(U,V); if(W>v; for(j=1;j<=4;j++) { w=w*v%mo; if(U