#include <bits/stdc++.h>
using namespace std;
const int MAXN = 262151, MOD = 998244353, G = 3, INVG = 332748118;
int cnt, kk, limit;
int f[3][MAXN], g[5][MAXN], rev[MAXN];
inline int read() {
  register int num = 0, neg = 1;
  register char ch = getchar();
  while (!isdigit(ch) && ch != '-') {
    ch = getchar();
  }
  if (ch == '-') {
    neg = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    num = (num << 3) + (num << 1) + (ch - '0');
    ch = getchar();
  }
  return num * neg;
}
inline int qpow(int base, int exponent) {
  long long int res = 1;
  while (exponent) {
    if (exponent & 1) {
      res = 1ll * res * base % MOD;
    }
    base = 1ll * base * base % MOD, exponent >>= 1;
  }
  return res;
}
inline void NTT(int *cp, int cnt, int inv) {
  int cur = 0, res = 0, omg = 0;
  for (register int i = 0; i < cnt; i++) {
    if (i < rev[i]) {
      swap(cp[i], cp[rev[i]]);
    }
  }
  for (register int i = 2; i <= cnt; i <<= 1) {
    cur = i >> 1, res = qpow(inv == 1 ? G : INVG, (MOD - 1) / i);
    for (register int *p = cp; p != cp + cnt; p += i) {
      omg = 1;
      for (register int j = 0; j < cur; j++) {
        int t = 1ll * omg * p[j + cur] % MOD, t2 = p[j];
        p[j + cur] = (t2 - t + MOD) % MOD, p[j] = (t2 + t) % MOD;
        omg = 1ll * omg * res % MOD;
      }
    }
  }
  if (inv == -1) {
    int invl = qpow(cnt, MOD - 2);
    for (register int i = 0; i < cnt; i++) {
      cp[i] = 1ll * cp[i] * invl % MOD;
    }
  }
}
inline void shift(int fd) {
  int cnt = 1, limit = -1;
  while (cnt <= (fd << 1)) {
    cnt <<= 1, limit++;
  }
  for (register int i = 0; i < cnt; i++) {
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << limit);
    g[0][i] = g[1][i] = g[2][i] = g[3][i] = g[4][i] = 0;
  }
  NTT(f[0], cnt, 1), NTT(f[1], cnt, 1), NTT(f[2], cnt, 1);
  for (register int i = 0; i < cnt; i++) {
    g[0][i] = (long long int)f[0][i] * f[0][i] % MOD,
    g[1][i] = (long long int)f[1][i] * f[1][i] % MOD;
    g[2][i] = (long long int)f[2][i] * f[2][i] % MOD,
    g[3][i] = (long long int)f[0][i] * f[1][i] % MOD;
    g[4][i] = (long long int)f[1][i] * f[2][i] % MOD,
    f[0][i] = f[1][i] = f[2][i] = 0;
  }
  NTT(g[0], cnt, -1), NTT(g[1], cnt, -1), NTT(g[2], cnt, -1);
  NTT(g[3], cnt, -1), NTT(g[4], cnt, -1);
  for (register int i = 0; i < cnt; i++) {
    f[0][i] = (g[0][i] + (i ? g[1][i - 1] : 0)) % MOD;
    f[1][i] = (g[3][i] + (i ? g[4][i - 1] : 0)) % MOD;
    f[2][i] = (g[1][i] + (i ? g[2][i - 1] : 0)) % MOD;
  }
  for (register int i = 0; i < cnt; i++) {
    g[0][i] = g[1][i] = g[2][i] = g[3][i] = g[4][i] = 0;
  }
  for (register int i = fd; i < cnt; i++) {
    f[0][i] = f[1][i] = f[2][i] = 0;
  }
}
inline void setBit(int fd) {
  for (register int i = 0; i < fd; i++) {
    f[2][i] = f[1][i], f[1][i] = f[0][i], f[0][i] = 0;
  }
  f[0][0] = 1;
  for (register int i = 1; i < fd; i++) {
    f[0][i] = ((f[1][i - 1] + f[2][i - 1]) % MOD + f[1][i]) % MOD;
  }
}
int main() {
  cnt = read(), kk = read(), f[0][0] = f[1][0] = f[0][1] = 1, limit = log2(cnt);
  for (register int i = limit - 1; i >= 0; i--) {
    shift(kk + 10);
    if (cnt & (1 << i)) {
      setBit(kk + 10);
    }
  }
  for (register int i = 1; i <= kk; i++) {
    printf("%d ", f[0][i]);
  }
}
