#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; using namespace atcoder; typedef long long ll; typedef pair P; int main() { int n, q; cin>>n>>q; using mint=modint998244353; vector v(3001); v[0]=1; for(int i=1; i<=3000; i++) v[i]=v[i-1]*mint(n-1+i)/mint(i); int i0=0; map mpl, mpr; for(int i=0; i>k>>a>>b>>s>>t; b++; if(mpl.find(k)!=mpl.end()){ int a1=mpl[k], b1=mpr[k]; if(a1==0){ i0-=b1; }else{ for(int j=0; j<=3000; j++){ if(j>=a1) v[j]+=v[j-a1]; if(j>=b1) v[j]-=v[j-b1]; } } a=min(a, a1), b=max(b, b1); } mpl[k]=a, mpr[k]=b; if(a==0){ i0+=b; }else{ for(int j=3000; j>=0; j--){ if(j+a<=3000) v[j+a]-=v[j]; if(j+b<=3000) v[j+b]+=v[j]; } } mint ans=0; for(int j=max(0, s-i0); j<=t-i0; j++) ans+=v[j]; cout<