#include <bits/stdc++.h>
using namespace std;
int const N = 1 << 18;
int const mod = 998244353;
int const gen = 3;
void add(int& a, int b) {
  if ((a += b) >= mod) a -= mod;
}
int prod(int a, int b) {
  unsigned long long x = (unsigned long long)a * b;
  unsigned int xh = x >> 32, xl = x, q, r;
  asm("divl %4; \n\t" : "=a"(q), "=d"(r) : "d"(xh), "a"(xl), "r"(mod));
  return r;
}
int modpow(int a, int b) {
  int ret = 1;
  for (; b > 0; b /= 2) {
    if (b % 2) ret = prod(ret, a);
    a = prod(a, a);
  }
  return ret;
}
int w[N + 5], rw[N + 5], bitrev[N + 5];
void fft(int* a, int n, bool inv) {
  for (int i = 0; i < n; ++i) {
    if (i < bitrev[i]) {
      swap(a[i], a[bitrev[i]]);
    }
  }
  for (int len = 2; len <= n; len *= 2) {
    int s = N / len;
    for (int i = 0; i < n; i += len) {
      for (int q = 0, j = i, k = i + len / 2; k < i + len; q += s, ++j, ++k) {
        int x = prod(!inv ? w[q] : rw[q], a[k]);
        a[k] = a[j];
        add(a[k], mod - x);
        add(a[j], x);
      }
    }
  }
  if (inv) {
    int nr = modpow(n, mod - 2);
    for (int i = 0; i < n; ++i) a[i] = prod(a[i], nr);
  }
}
unordered_map<int, pair<vector<int>, vector<int>>> dp;
void go(int n, int k) {
  if (dp.find(n) != dp.end()) {
    return;
  }
  auto& ans = dp[n];
  ans.first.assign(k, 0);
  for (int sub = 0; sub < 2; ++sub) {
    int nl = n / 2 - sub, nr = n - n / 2 - sub;
    go(nl, k);
    go(nr, k);
    static int p[N + 5];
    auto& fl = dp.find(nl)->second.second;
    auto& fr = dp.find(nr)->second.second;
    for (int i = 0; i < k; ++i) p[i] = prod(fl[i], fr[i]);
    fft(p, k, true);
    for (int i = sub; i < k / 2; ++i) add(ans.first[i], p[i - sub]);
  }
  ans.second = ans.first;
  fft(ans.second.data(), k, false);
}
int main() {
  {
    w[0] = rw[0] = 1;
    w[1] = modpow(gen, (mod - 1) / N);
    rw[1] = modpow(w[1], mod - 2);
    for (int i = 2; i < N; ++i) {
      w[i] = prod(w[i - 1], w[1]);
      rw[i] = prod(rw[i - 1], rw[1]);
    }
  }
  int n, k;
  scanf("%d%d", &n, &k);
  int logk = 1, k2 = 2;
  while (k2 / 2 < k + 1) {
    ++logk;
    k2 *= 2;
  }
  bitrev[0] = 0;
  for (int i = 1; i < k2; ++i) {
    bitrev[i] = bitrev[i >> 1] >> 1 | (i & 1) << (logk - 1);
  }
  dp[0].first.assign(k2, 0);
  dp[0].first[0] = 1;
  dp[0].second = dp[0].first;
  fft(dp[0].second.data(), k2, false);
  dp[1].first.assign(k2, 0);
  dp[1].first[0] = 1;
  dp[1].first[1] = 1;
  dp[1].second = dp[1].first;
  fft(dp[1].second.data(), k2, false);
  go(n, k2);
  auto& ans = dp.find(n)->second.first;
  for (int i = 1; i <= k; ++i) cout << ans[i] << ' ';
  cout << '\n';
}
