#define PROBLEM "https://judge.yosupo.jp/problem/range_affine_range_sum_large_array"
#include"../template.h"
#include"SegTree/SparseSegTree.h"voidsolve(){intn,q;cin>>n>>q;SparseSegTreest(n);while(q--){inttv,l,r;cin>>tv>>l>>r;if(tv==0){llb,c;cin>>b>>c;st.update(l+1,r,{b,c});}elseif(tv==1){cout<<st.query(l+1,r)<<'\n';}}}
#line 1 "DataStructure/Range_affine_range_sum_large_array.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/range_affine_range_sum_large_array"
#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/SparseSegTree.h"
structNode{Node*left=nullptr,*right=nullptr;llval;plllazy={1,0};Node():val(0),lazy({1,0}){}Nodeoperator+(constNode&b)const{Noderes;res.val=(val+b.val)%mod;returnres;}~Node(){deleteleft;deleteright;}};classSparseSegTree{private:Node*r=newNode();intn;voidpush(Node*cur,intl,intr){intm=(l+r)>>1;if(!cur->left)cur->left=newNode();if(!cur->right)cur->right=newNode();apply(cur->left,l,m,cur->lazy);apply(cur->right,m+1,r,cur->lazy);cur->lazy={1,0};}voidapply(Node*cur,intl,intr,pllx){llb=x.fi,c=x.se;intlen=r-l+1;cur->val=(cur->val*b%mod+c*len%mod)%mod;cur->lazy.fi=cur->lazy.fi*b%mod;cur->lazy.se=(cur->lazy.se*b%mod+c)%mod;}voidupdate(Node*cur,intl,intr,intu,intv,pllx){if(l>v||r<u)return;if(u<=l&&r<=v){apply(cur,l,r,x);return;}push(cur,l,r);llmid=(l+r)>>1;update(cur->left,l,mid,u,v,x);update(cur->right,mid+1,r,u,v,x);cur->val=(cur->left->val+cur->right->val)%mod;}llquery(Node*cur,intl,intr,intu,intv){if(l>v||r<u)return0;if(u<=l&&r<=v)returncur->val;push(cur,l,r);intmid=(l+r)>>1;llt1=query(cur->left,l,mid,u,v)%mod;llt2=query(cur->right,mid+1,r,u,v)%mod;return(t1+t2)%mod;}public:SparseSegTree(){}SparseSegTree(int_n):n(_n){}voidupdate(intu,intv,pllval){update(r,1,n,u,v,val);}llquery(intu,intv){returnquery(r,1,n,u,v);}};#line 5 "DataStructure/Range_affine_range_sum_large_array.test.cpp"
voidsolve(){intn,q;cin>>n>>q;SparseSegTreest(n);while(q--){inttv,l,r;cin>>tv>>l>>r;if(tv==0){llb,c;cin>>b>>c;st.update(l+1,r,{b,c});}elseif(tv==1){cout<<st.query(l+1,r)<<'\n';}}}