#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 16 | 5;
const long long mod = 998244353;
namespace Poly {
int w[N], rev[N];
inline int Pow(int x, int exp) {
  int r = 1;
  for (; exp; exp >>= 1, x = 1LL * x * x % mod)
    if (exp & 1) r = 1LL * r * x % mod;
  return r;
}
inline void Init() {
  int tmp = Pow(3, (mod - 1) >> 16);
  for (int i = w[0] = 1, j = 1 << 16; i < j; i++)
    w[i] = (long long)w[i - 1] * tmp % mod;
}
inline void Dft(int *a, int n) {
  int E = 1 << n;
  for (int i = 0; i < E; i++) {
    if (i & 1)
      rev[i] = rev[i - 1] | (E >> 1);
    else
      rev[i] = rev[i >> 1] >> 1;
    if (rev[i] < i) swap(a[rev[i]], a[i]);
  }
  register int x, y;
  for (int i = 1, d = 1; d <= n; i <<= 1, d++)
    for (int j = 0; j < E; j += 1 << d)
      for (int k = j; k < j + i; k++) {
        x = a[k];
        y = (long long)a[k + i] * w[(k - j) << (16 - d)] % mod;
        a[k] = x + y;
        a[k + i] = x - y;
        if (a[k] >= mod) a[k] -= mod;
        if (a[k + i] < 0) a[k + i] += mod;
      }
}
inline void Mul(int *a, int *b, int *c, int n) {
  for (int i = 0, E = 1 << n; i < E; i++) c[i] = (long long)a[i] * b[i] % mod;
  reverse(c + 1, c + (1 << n));
  Dft(c, n);
  int inv = Pow(1 << n, mod - 2);
  for (int i = 0, E = 1 << n; i < E; i++) c[i] = (long long)c[i] * inv % mod;
}
}  // namespace Poly
int na[N], nb[N], nc[N], tmp[N];
namespace Ans {
int a[N], b[N], c[N];
inline void Add(int E = 1 << 15) {
  memcpy(c, b, sizeof(int) * (E + 5));
  memcpy(b, a, sizeof(int) * (E + 5));
  for (int i = 1; i < E; i++)
    a[i] = ((long long)a[i] + b[i - 1] + c[i - 1]) % mod;
}
inline void Double() {
  int l = 1 << 15 | 5;
  while (!a[l]) l--;
  int t = 0;
  while ((1 << t) <= l + l) t++;
  Poly ::Dft(a, t);
  Poly ::Dft(b, t);
  Poly ::Dft(c, t);
  Poly ::Mul(a, a, na, t);
  Poly ::Mul(b, b, nc, t);
  Poly ::Mul(c, c, tmp, t);
  for (int i = 1, E = 1 << 15; i < E; i++) na[i] = (na[i] + nc[i - 1]) % mod;
  for (int i = 1, E = 1 << 15; i < E; i++) nc[i] = (nc[i] + tmp[i - 1]) % mod;
  Poly ::Mul(a, b, nb, t);
  Poly ::Mul(b, c, tmp, t);
  for (int i = 0, E = 1 << 15; i < E; i++) {
    a[i] = na[i];
    c[i] = nc[i];
    if (!i)
      b[i] = nb[i];
    else
      b[i] = (tmp[i - 1] + nb[i]) % mod;
  }
  for (int i = 1 << 15, E = 1 << 16; i < E; i++) a[i] = b[i] = c[i] = 0;
}
}  // namespace Ans
inline void solve(int n) {
  if (n <= 256) {
    Ans ::a[0] = 1;
    for (int i = 1; i <= n; i++) Ans ::Add(i + 1);
  } else if (n & 1) {
    solve(n - 1);
    Ans ::Add();
  } else {
    solve(n >> 1);
    Ans ::Double();
  }
}
int main() {
  int n, k;
  Poly ::Init();
  scanf("%d%d", &n, &k);
  solve(n);
  for (int i = 1; i <= k; i++) printf("%d%c", Ans ::a[i], i == k ? '\n' : ' ');
  return 0;
}
