#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int maxn = 100005;
const int g = 3;
inline void read(int &x) {
  x = 0;
  int p = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') p = -p;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    x = (x << 1) + (x << 3) + (ch - '0'), ch = getchar();
  x = x * p;
}
int rev[maxn << 3];
inline int qpow(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) res = 1LL * res * x % mod;
    x = 1LL * x * x % mod;
    y >>= 1;
  }
  return res;
}
inline void add(int &x, int y) { x + y >= mod ? x = x + y - mod : x += y; }
inline int sum(int &x, int y) { return x + y >= mod ? x + y - mod : x + y; }
inline int sub(int x, int y) { return x - y < 0 ? x - y + mod : x - y; }
inline void get_rev(int bit) {
  for (int i = 0; i < (1 << bit); ++i) {
    rev[i] = ((rev[i >> 1] >> 1) | ((i & 1) << (bit - 1)));
  }
}
void ntt(int *a, int n, int dft) {
  for (int i = 0; i < n; ++i) {
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  }
  for (int step = 1; step < n; step <<= 1) {
    int wn = qpow(g, (mod - 1) / (step << 1));
    if (!dft) wn = qpow(wn, mod - 2);
    for (int i = 0; i < n; i += (step << 1)) {
      int wnk = 1;
      for (int j = i; j < i + step; ++j) {
        int x = a[j];
        int y = 1LL * a[j + step] * wnk % mod;
        add(a[j], y);
        a[j + step] = sub(x, y);
        wnk = 1LL * wnk * wn % mod;
      }
    }
  }
  if (!dft) {
    int inv = qpow(n, mod - 2);
    for (int i = 0; i < n; ++i) {
      a[i] = 1LL * a[i] * inv % mod;
    }
  }
}
int n, m, a[32][4][maxn << 2], b[10][maxn << 2], dp[5][12], s[32], len;
int main() {
  int bit = 16, S = (1 << 16);
  get_rev(bit);
  dp[0][0] = 1;
  dp[1][1] = 1;
  dp[1][0] = 1;
  for (int i = 2; i <= 4; ++i) {
    dp[i][0] = 1;
    for (int j = 1; j <= 2 * i; ++j) {
      dp[i][j] = dp[i - 1][j] + dp[i - 2][j - 1] + dp[i - 1][j - 1];
    }
  }
  read(n);
  read(m);
  if (n <= 4) {
    for (int i = 1; i <= m; ++i) printf("%d ", dp[n][i]);
    return 0;
  }
  len = 0;
  while (n) {
    s[++len] = (n & 1);
    n >>= 1;
  }
  int now = s[len] * 2 + s[len - 1];
  for (int i = 0; i <= 2; ++i) {
    for (int j = 0; j <= 10; ++j) {
      a[len - 1][i][j] = dp[now - i][j];
    }
  }
  for (int i = len - 2; i >= 1; --i) {
    now = now * 2 + s[i];
    ntt(a[i + 1][0], S, 1);
    ntt(a[i + 1][1], S, 1);
    ntt(a[i + 1][2], S, 1);
    for (int j = 0; j < S; ++j) {
      b[0][j] = 1LL * a[i + 1][0][j] * a[i + 1][0][j] % mod;
      b[1][j] = 1LL * a[i + 1][1][j] * a[i + 1][1][j] % mod;
      b[2][j] = 1LL * a[i + 1][0][j] * a[i + 1][1][j] % mod;
      b[3][j] = 1LL * a[i + 1][1][j] * a[i + 1][2][j] % mod;
      b[4][j] = 1LL * a[i + 1][2][j] * a[i + 1][2][j] % mod;
    }
    for (int j = 0; j <= 4; ++j) ntt(b[j], S, 0);
    for (int j = 0; j <= m; ++j) {
      a[i][0 + s[i]][j] = sum(b[0][j], (j ? b[1][j - 1] : 0));
      a[i][1 + s[i]][j] = sum(b[2][j], (j ? b[3][j - 1] : 0));
      a[i][2 + s[i]][j] = sum(b[1][j], (j ? b[4][j - 1] : 0));
    }
    if (s[i]) {
      a[i][0][0] = 1;
      for (int j = 1; j <= m; ++j) {
        a[i][0][j] = sum(a[i][1][j], a[i][1][j - 1]);
        add(a[i][0][j], a[i][2][j - 1]);
      }
    }
  }
  for (int i = 1; i <= m; ++i) printf("%d ", a[1][0][i]);
}
