#include #include using namespace std; using i32 = int; using i64 = long long; using f64 = long double; using i128 = __int128_t; using p2 = pair; using el = tuple; using mint = atcoder::modint998244353; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); } i64 pow(i64 x, i64 n) { i64 res = 1; i64 t = x; while (n > 0) { if (n & 1) { res = res * t; } t = t * t; } return res; } void _main() { vector fac(10000, 1), finv(10000, 1), inv(10000, 0); inv[1] = 1; i64 mod = 998244353; for (i64 i = 2; i < fac.size(); i++) { fac[i] = fac[i - 1] * i; inv[i] = -inv[mod % i] * (mod / i); finv[i] = finv[i - 1] * inv[i]; } i64 n; cin >> n; vector> dp(n + 1); vector ans(n + 1, 0); vector e(n + 1, 0), p(n + 1, 0); p[n] = 1; for (i64 i = n; i >= 1; i--) { mint sum = 0; for (i64 j = 1; j < i; j++) { sum += fac[i] * finv[j] * finv[i - j]; } for (i64 j = 1; j < i; j++) { p[j] += p[i] * fac[i] * finv[j] * finv[i - j] / sum; } for (i64 j = i + 1; j <= n; j++) { ans[i] += e[j] * p[j]; } if (i == 1) break; e[i] = mint(3).pow(i) / (mint(2).pow(i) * 3 - 6); } for (i64 i = 1; i <= n; i++) { cout << ans[i].val() << " "; } cout << "\n"; }