#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 using namespace std; int main(){ solve(); int i,n,m; cin >> n >> m; vector F(n + 1),G(n + 1); for(i=0;i<=n;i++){ mint val = pw(m + 1 - i,n)*fi[i]; F[i] = i&1 ? -val : val; } for(i=0;i<=n;i++) G[i] = fi[i]; vector H = convolution(F,G); mint ans = 0; for(i=1;i<=n;i++){ ans += (2*i - 1)*f[i]*H[i]; } cout << ans.val() << "\n"; // for(i=1;i<=n;i++) cout << (H[i]*f[i]).val() << " "; // cout << "\n"; }