#include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep1(a) for(int z = 0; z < a; z++) #define rep2(i, a) for(int i = 0; i < a; i++) #define rep3(i, a, b) for(int i = a; i < b; i++) #define rep4(i, a, b, c) for(int i = a; i < b; i += c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) const int MOD=998244353; const int64_t INF = 1LL<<60; #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") void YN(bool x){ if(x) cout<<"Yes"; else cout<<"No"; } const int MAX = 510000; int64_t fac[MAX],finv[MAX],inv[MAX]; void COMinit() { fac[0]=fac[1]=1; finv[0]=finv[1]=1; inv[1]=1; for(int i=2;i>N; vector A(N+1,1); rep(i,N)A[i+1]=(A[i]*2)%MOD; mint ans=A[N]; vector> S(N+1,vector(N+1,0)); S[0][0]=1; rep(i,1,N+1){ rep(j,1,N+1){ S[i][j]=S[i-1][j-1]+j*S[i-1][j]; } } rep(i,2,N+1){ rep(j,i,N+1){ mint tmp=COM(N,j)*S[j][i]; tmp*=pow_mod(A[i]-i,N-j,MOD); ans+=tmp; } } cout<