#include #include using namespace std; using mint=atcoder::modint998244353; template struct static_xor_segtree { static_xor_segtree():static_xor_segtree(0){} static_xor_segtree(int n_):static_xor_segtree(vector(n_,e())){} static_xor_segtree(const vector&v):n((int)v.size()) { log=0; while((1<(sz,e())); for(int i=0;i>=1,r>>=1,d++; } return op(pl,pr); } private: int n,log,sz; vector>node; }; struct F{mint a,b;}; F op(F f, F g){return F{f.a*g.a,f.b*g.a+g.b};} F e(){return F{1,0};} int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N,Q; cin>>N>>Q; vectorFs(N); for(int i=0;i>a>>b; Fs[i]=F{a,b}; } static_xor_segtreeseg(Fs); while(Q--) { int l,r,p,x; cin>>l>>r>>p>>x; auto f=seg.prod(l,r,p); cout<<(f.a*x+f.b).val()<<'\n'; } }