#include <bits/stdc++.h>
using namespace std;
long long const MOD = 998244353;
long long inv(long long b, long long M) {
  long long u = 1, x = 0, s = b, t = M;
  while (s) {
    long long q = t / s;
    swap(x -= u * q, u);
    swap(t -= s * q, s);
  }
  return (x %= M) >= 0 ? x : x + M;
}
long long pow(long long a, long long b, long long M) {
  long long x = 1;
  for (; b > 0; b >>= 1) {
    if (b & 1) x = (a * x) % M;
    a = (a * a) % M;
  }
  return x;
}
void fmt(vector<long long> &x, long long mod, int sign = +1) {
  int n = x.size();
  long long h = pow(3, (mod - 1) / n, mod);
  if (sign < 0) h = inv(h, mod);
  for (int i = 0, j = 1; j < n - 1; ++j) {
    for (int k = n >> 1; k > (i ^= k); k >>= 1)
      ;
    if (j < i) swap(x[i], x[j]);
  }
  for (int m = 1; m < n; m *= 2) {
    long long w = 1, wk = pow(h, n / (2 * m), mod);
    for (int i = 0; i < m; ++i) {
      for (int j = i; j < n; j += 2 * m) {
        long long u = x[j], d = x[j + m] * w % mod;
        if ((x[j] = u + d) >= mod) x[j] -= mod;
        if ((x[j + m] = u - d) < 0) x[j + m] += mod;
      }
      w = w * wk % mod;
    }
  }
  if (sign < 0) {
    long long n_inv = inv(n, mod);
    for (auto &a : x) a = (a * n_inv) % mod;
  }
}
vector<long long> conv(vector<long long> &x, vector<long long> &y,
                       long long mod) {
  fmt(x, mod, +1);
  fmt(y, mod, +1);
  for (int i = 0; i < x.size(); ++i) x[i] = (x[i] * y[i]) % mod;
  fmt(x, mod, -1);
  return x;
}
vector<long long> convolution(vector<long long> x, vector<long long> y) {
  for (auto &a : x) a %= MOD;
  for (auto &b : y) b %= MOD;
  int n = x.size() + y.size() - 1, size = n - 1;
  for (int s : {1, 2, 4, 8, 16}) size |= (size >> s);
  size += 1;
  x.resize(size);
  y.resize(size);
  long long A = MOD, B = MOD, C = MOD, D = (A * B % MOD);
  vector<long long> z(n), a = conv(x, y, A), b = a, c = b;
  for (int i = 0; i < n; ++i) {
    z[i] = A * (MOD * (b[i] - a[i]) % B);
    z[i] += D * (MOD * (c[i] - (a[i] + z[i]) % C) % C);
    if ((z[i] = (z[i] + a[i]) % MOD) < 0) z[i] += MOD;
  }
  return z;
}
int sum(int a, int b, int mod) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
unordered_map<int, vector<long long>> mp;
int cnt;
int k;
const int mod = 998244353;
void solve(int n) {
  if (n <= 2) return;
  if (mp.count(n)) return;
  int a = n / 2, b = n - a;
  solve(a);
  solve(a - 1);
  if (n & 1) {
    auto &x = mp[a - 1];
    auto &y = mp[a];
    auto &z = mp[b] = vector<long long>(min((int)y.size() + 1, k + 1));
    for (int i = 0; i < z.size(); i++) {
      if (i < y.size()) z[i] = sum(z[i], y[i], mod);
      if (i > 0 && i <= y.size()) z[i] = sum(z[i], y[i - 1], mod);
      if (i > 0 && i <= x.size()) z[i] = sum(z[i], x[i - 1], mod);
    }
  }
  auto p = convolution(mp[a], mp[b]);
  auto q = convolution(mp[a - 1], mp[b - 1]);
  auto &r = mp[n] = vector<long long>(min((int)p.size() + 1, k + 1));
  for (int i = 0; i < r.size(); i++) {
    if (i < p.size()) r[i] = sum(r[i], p[i], mod);
    if (i > 0 && i <= q.size()) r[i] = sum(r[i], q[i - 1], mod);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n >> k;
  mp[0] = {1};
  mp[1] = {1, 1};
  mp[2] = {1, 3, 1};
  solve(n);
  auto ans = mp[n];
  for (int i = 1; i <= k; i++)
    if (i < ans.size())
      cout << ans[i] << " \n"[i == k];
    else
      cout << 0 << " \n"[i == k];
  return 0;
}
