func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 5005;   template <typename T>   inline void read(T &AKNOI) {     T x = 0, flag = 1;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) flag = -1;       ch = getchar();     }     while (isdigit(ch)) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     AKNOI = flag * x;   }   namespace ModCalculator {   const int MOD = 998244353;   inline void Inc(int &x, int y) {     x += y;     if (x >= MOD) x -= MOD;   }   inline void Dec(int &x, int y) {     x -= y;     if (x < 0) x += MOD;   }   inline int Add(int x, int y) {     Inc(x, y);     return x;   }   inline int Sub(int x, int y) {     Dec(x, y);     return x;   }   inline int Mul(int x, int y) { return 1LL * x * y % MOD; }   inline int Ksm(int x, int k) {     int ret = 1;     for (; k; k >>= 1) {       if (k & 1) ret = Mul(ret, x);       x = Mul(x, x);     }     return ret;   }   inline int Inv(int x) { return Ksm(x, MOD - 2); }   }  // namespace ModCalculator   using namespace ModCalculator;   int n, fac[N], finv[N], E[N][N];   void init() {     read(n);     fac[0] = 1;     for (int i = 1; i <= n; ++i) {       fac[i] = Mul(fac[i - 1], i);     }     finv[n] = Inv(fac[n]);     for (int i = n; i >= 1; --i) {       finv[i - 1] = Mul(finv[i], i);     }     E[0][0] = 1;     for (int i = 1; i <= n; ++i) {       E[i][0] = 1;       for (int j = 1; j <= i; ++j) {         E[i][j] = Add(Mul(E[i - 1][j], j + 1), Mul(E[i - 1][j - 1], i - j));       }     }   }   void solve() {     for (int i = 1; i <= n; ++i) {       int ans = 0;       for (int j = i; j <= n; ++j) {         Inc(ans, Mul(E[j][i - 1], Mul(fac[n], finv[j])));       }       printf( %d  , ans);     }   }   int main() {     init();     solve();     return 0;   }   