#include #define int long long using namespace std; const int N=5010,mod=998244353; int n,ans,s[N][N],c[N][N],pw[N]; int qpow(int a,int b){ int t=1; while(b){ if(b&1)t=t*a%mod; b/=2,a=a*a%mod; } return t; } void init(int n){ for(int i=1;i<=n;i++)pw[i]=pw[i-1]*2%mod; for(int i=1;i<=n;i++)pw[i]=(pw[i]-i+mod)%mod; for(int i=1;i<=n;i++){c[i][0]=1;for(int j=1;j<=i;j++)c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;} for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)s[i][j]=(s[i-1][j-1]+s[i-1][j]*j)%mod; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); pw[0]=c[0][0]=s[0][0]=1,cin>>n,init(n); for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ ans=(ans+c[n][i]*s[i][j]%mod*qpow(pw[j],n-i)%mod)%mod; } } cout<<(ans+1)%mod<<"\n"; return 0; } /* 2 3 2 2 3 1 2 */