#include #include using namespace std; using namespace atcoder; typedef long long ll; using mint=modint998244353; int M=3001; vector op(vector a,vector b){ vector c=convolution(a,b); vector r(min(M+1,(int)(c.size())),0); for(int i=0;i<(int)(r.size());i++){ r[i]=c[i]; } return r; } vector e(){ vector r(1,1); return r; } int main(){ int N,Q; cin>>N>>Q; vector K(Q); vector> que(Q,vector(4)); for(int i=0;i>K[i]; K[i]--; for(int j=0;j<4;j++){ cin>>que[i][j]; } } vector X=K; sort(X.begin(),X.end()); decltype(X)::iterator result=unique(X.begin(),X.end()); X.erase(result,X.end()); int L=X.size(); unordered_map Y; for(int i=0;i> Z(L,vector(M+1,1)); vector> x(L,vector(M+1,1)); segtree,op,e> seg(x); vector p(M+1,1); vector q(1,1); ll R=N-L; while(R){ if(R&1){ q=op(p,q); } p=op(p,p); R>>=1; } int I; for(int i=0;i A=op(seg.all_prod(),q); mint ANS=0; for(int j=que[i][2];j<=que[i][3];j++){ ANS+=A[j]; } cout<