/* #https://oeis.org/A273496 import pypyjit pypyjit.set_param("max_unroll_recursion=-1") import sys sys.setrecursionlimit(10**6) MOD = 998244353 N = int(input()) memo = [-1 for _ in range(2*10**5+1)] def a(n): if(n == 0):return 1 if(memo[n] != -1):return memo[n] memo[n] = n * a(n-1) % MOD return n * a(n-1) % MOD def nCr(n,r): return a(n) * pow(a(n-r),-1,MOD) * pow(a(r),-1,MOD) % MOD def f(n,k): if((n-k)%2 == 1):return 0 if(k == 0 and n%2 == 0):return nCr(n,n//2) return 2*nCr(n,(n-k)//2) for k in range(N+1): print(f(N,k),end=" ") print() */ #include #include using namespace std; using ll = long long; const int MOD = 998244353; const int MAXN = 2 * 100000 + 1; vector fact(MAXN, -1); // 階乗をMODで前計算(メモ化) ll a(int n) { if (n == 0) return 1; if (fact[n] != -1) return fact[n]; return fact[n] = n * a(n - 1) % MOD; } // modpow: a^b % MOD を高速に求める ll modpow(ll a, ll b, ll mod) { ll res = 1; a %= mod; while (b > 0) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } // 逆元を使ったnCr ll nCr(int n, int r) { if (r < 0 || r > n) return 0; return a(n) * modpow(a(n - r), MOD - 2, MOD) % MOD * modpow(a(r), MOD - 2, MOD) % MOD; } ll f(int n, int k) { if ((n - k) % 2 == 1) return 0; if (k == 0 && n % 2 == 0) return nCr(n, n / 2); return 2 * nCr(n, (n - k) / 2) % MOD; } int main() { int N; cin >> N; fact[0] = 1; for (int i = 1; i <= 2 * 100000; ++i) { fact[i] = fact[i - 1] * i % MOD; } for (int k = 0; k <= N; ++k) { cout << f(N, k) << " "; } cout << endl; return 0; }