#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; 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,mint>M; mint S(int n,int k){ mint one=1; if(M.count({n,k}))return M[{n,k}]; if(n==0&&k==0)return M[{n,k}]=one; if(k==1)return M[{n,k}]=one; if(n==k)return M[{n,k}]=one; return M[{n,k}]=S(n-1,k-1)+k*S(n-1,k); } int main(){ COMinit(); int64_t N;cin>>N; vector A(N+1,1); rep(i,N)A[i+1]=(A[i]*2)%MOD; mint ans=A[N]; 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<