#define MD 998244353 Comb comb; Mint cat(ll b){ if(b&1){ wt(0); exit(0); } if(b==0){ return 1; } return comb.C(b,b/2)-comb.C(b,b/2-1); } { ll@n,@q,@lr[2q],in[]; rep(j,q)++lr[2j+1]; sortA_index(2q,lr,in); unordered_mapm; ull b=0; ll x=0; Mint z=comb.fac(n/2)*comb.fac((n+1)/2); rep(j,2q){ ll i=in[j]; ll l=lr[j]; m[b]+=l-x; x=l; b^=1ull<<(i>>1); } m[0]+=n+(n&1)-x; for(auto t:m){ z*=cat(t.second); } wt(z); }