#define PROBLEM "https://judge.yosupo.jp/problem/range_affine_range_sum"
#include"../template.h"
#include"SegTree/Affline.h"voidsolve(){intn,q;cin>>n>>q;vector<ll>a(n+1);for(inti=1;i<=n;i++){cin>>a[i];}AfflineSegTree<ll>st(n);st.build(1,1,n,a);while(q--){inttv,l,r;cin>>tv>>l>>r;if(tv==0){llb,c;cin>>b>>c;st.update(1,1,n,l+1,r,make_pair(b,c));}elseif(tv==1){cout<<st.getSumMod(1,1,n,l+1,r)<<'\n';}}}
#line 1 "DataStructure/Range_affine_range_sum.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/range_affine_range_sum"
#line 2 "template.h"
#include<bits/stdc++.h>usingnamespacestd;#define ll long long
#define MOD (ll)(1e9+7)
#define all(x) (x).begin(),(x).end()
#define unique(x) x.erase(unique(all(x)), x.end())
#define INF32 ((1ull<<31)-1)
#define INF64 ((1ull<<63)-1)
#define inf (ll)1e18
#define vi vector<int>
#define pii pair<int, int>
#define pll pair<ll, ll>
#define fi first
#define se second
constintmod=998244353;voidsolve();intmain(){ios_base::sync_with_stdio(false);cin.tie(NULL);// cin.exceptions(cin.failbit);// int t; cin >> t;// while(t--)solve();cerr<<"\nTime run: "<<1000*clock()/CLOCKS_PER_SEC<<"ms"<<'\n';return0;}#line 2 "DataStructure/SegTree/Affline.h"
template<typenameT>structAfflineSegTree{vector<T>st;vector<pll>lazy;AfflineSegTree(){}AfflineSegTree(intn):st(n*4),lazy(n*4){}voidbuild(intid,intl,intr,constvector<ll>&a){lazy[id]={1,0};if(l==r){st[id]=a[l]%mod;return;}intm=(l+r)>>1;build(id*2,l,m,a);build(id*2+1,m+1,r,a);st[id]=(st[id*2]+st[id*2+1])%mod;}voidpush(intid,intl,intr){intm=(l+r)>>1;apply(id*2,l,m,lazy[id]);apply(id*2+1,m+1,r,lazy[id]);lazy[id]={1,0};}voidapply(intid,intl,intr,pllval){intlen=r-l+1;st[id]=(st[id]*val.fi%mod+val.se*len%mod)%mod;lazy[id].fi=lazy[id].fi*val.fi%mod;lazy[id].se=(lazy[id].se*val.fi%mod+val.se)%mod;}voidupdate(intid,intl,intr,intu,intv,pllval){if(v<l||u>r)return;if(u<=l&&v>=r){apply(id,l,r,val);return;}push(id,l,r);intmid=(l+r)>>1;update(id*2,l,mid,u,v,val);update(id*2+1,mid+1,r,u,v,val);st[id]=(st[id*2]+st[id*2+1])%mod;}TgetSumMod(intid,intl,intr,intu,intv){if(l>v||r<u)return0;if(l>=u&&r<=v)returnst[id];intmid=(l+r)>>1;push(id,l,r);Tt1=getSumMod(id*2,l,mid,u,v)%mod;Tt2=getSumMod(id*2+1,mid+1,r,u,v)%mod;return(t1+t2)%mod;}};#line 5 "DataStructure/Range_affine_range_sum.test.cpp"
voidsolve(){intn,q;cin>>n>>q;vector<ll>a(n+1);for(inti=1;i<=n;i++){cin>>a[i];}AfflineSegTree<ll>st(n);st.build(1,1,n,a);while(q--){inttv,l,r;cin>>tv>>l>>r;if(tv==0){llb,c;cin>>b>>c;st.update(1,1,n,l+1,r,make_pair(b,c));}elseif(tv==1){cout<<st.getSumMod(1,1,n,l+1,r)<<'\n';}}}