#include #include #include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; const int MX = 1000010; mint f[MX],inv[MX],fi[MX]; constexpr ll mod = 998244353; void solve(){ inv[1] = 1; for(int i=2;i> n >> m; for(i=0;i> a[i]; for(i=1;i ff = {1}; for(i=1;i g(m + 1); for(j=0;j<=m;j++){ if(j + b[i]>=0) g[j] = fi[j]*fi[j + b[i]]; } ff = convolution(ff,g); ff.resize(m + 1); } mint ans = 0; for(i=0;i<=m;i++){ if(ff.size()>i && a[0]>=i && m - a[n - 1]>=i) ans += ff[i]*fi[a[0] - i]*fi[m - a[n - 1] - i]; } ans *= f[m]; cout << ans.val() << "\n"; }