#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; int a[1010],b[1010]; mint fa[1010]; int main(){ int i,j,h,w; cin >> h >> w; vector f = {1}; fa[0] = 1; for(i=1;i<=w;i++) fa[i] = fa[i - 1]*i; for(i=0;i> a[i] >> b[i]; mint val1 = w + b[i],val2 = w + a[i] - 1; mint pr1 = 1,pr2 = 1; for(j=1;j<=w;j++){ pr1 *= val1; pr1 /= j; pr2 *= val2; pr2 /= j; val1--; val2--; } vector g; g.push_back(pr1 - pr2); for(j=1;j<=w;j++){ pr1 *= val1; pr1 /= (w + j); pr2 *= val2; pr2 /= (w + j); val1--; val2--; g.push_back((pr1 - pr2)/fa[j]); } // for(mint x:g) cout << x.val() << " "; // cout << endl; f = convolution(f,g); f.resize(w + 1); } cout << (fa[w]*f[w]).val() << endl; }