#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 16;
const int lbt = 998244353;
int rev(int a);
int fast_pow(int a, int t);
void ntt(int *a, int k, int *ans, bool rev);
void juanji(int *a, int *b, int *c, int n, int m, int top);
int cur[maxn], cur1[maxn], cur2[maxn];
int tmp[maxn], tmp1[maxn], tmp2[maxn];
int t1[maxn], t2[maxn];
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  cur[0] = 1;
  for (int i = 31; i >= 0; i--) {
    juanji(cur, cur, t1, k, k, k);
    juanji(cur1, cur1, t2, k, k, k);
    tmp[0] = t1[0];
    for (int j = 1; j <= k; j++) tmp[j] = (t1[j] + t2[j - 1]) % lbt;
    juanji(cur, cur1, t1, k, k, k);
    juanji(cur1, cur2, t2, k, k, k);
    tmp1[0] = t1[0];
    for (int j = 1; j <= k; j++) tmp1[j] = (t1[j] + t2[j - 1]) % lbt;
    juanji(cur1, cur1, t1, k, k, k);
    juanji(cur2, cur2, t2, k, k, k);
    tmp2[0] = t1[0];
    for (int j = 1; j <= k; j++) tmp2[j] = (t1[j] + t2[j - 1]) % lbt;
    for (int j = 0; j <= k; j++) {
      cur[j] = tmp[j];
      cur1[j] = tmp1[j];
      cur2[j] = tmp2[j];
    }
    if (n >> i & 1) {
      for (int j = 0; j <= k; j++) {
        cur2[j] = cur1[j];
        cur1[j] = cur[j];
      }
      for (int j = k; j >= 1; j--) {
        cur[j] = ((long long)cur[j] + cur[j - 1] + cur2[j - 1]) % lbt;
      }
    }
  }
  for (int i = 1; i <= k; i++) {
    printf("%d ", cur[i]);
  }
  return 0;
}
void ntt(int *a, int k, int *ans, bool rev) {
  static int bit_rev[maxn];
  int n = 1 << k;
  for (int i = 0; i < n; i++) {
    bit_rev[i] = (bit_rev[i >> 1] >> 1) | ((i & 1) << (k - 1));
  }
  for (int i = 0; i < n; i++) {
    ans[bit_rev[i]] = a[i];
  }
  for (int t = 1; t <= k; t++) {
    int w_n = fast_pow(rev ? ::rev(3) : 3, (lbt - 1) / (1 << t));
    for (int i = 0; i < n; i += (1 << t)) {
      int w = 1;
      for (int j = i; j < i + (1 << t - 1); j++) {
        int ans0 = ans[j];
        int ans1 = ans[j + (1 << t - 1)];
        ans[j] = (ans0 + (long long)w * ans1) % lbt;
        ans[j + (1 << t - 1)] = (ans0 + (long long)(lbt - w) * ans1) % lbt;
        w = (long long)w * w_n % lbt;
      }
    }
  }
  if (rev) {
    int rn = ::rev(n);
    for (int i = 0; i < n; i++) {
      ans[i] = (long long)rn * ans[i] % lbt;
    }
  }
}
void juanji(int *a, int *b, int *c, int n, int m, int top) {
  static int fa[maxn], fb[maxn];
  int k = 0;
  while ((1 << k) < n + m + 1) k++;
  ntt(a, k, fa, 0);
  ntt(b, k, fb, 0);
  for (int i = 0; i < (1 << k); i++) fa[i] = (long long)fa[i] * fb[i] % lbt;
  ntt(fa, k, c, 1);
  for (int i = top + 1; i < (1 << k); i++) c[i] = 0;
}
int d, x, y;
void gcd(int a, int b) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
    return;
  }
  gcd(b, a % b);
  int t = x;
  x = y;
  y = t - a / b * y;
}
int rev(int a) {
  gcd(a, lbt);
  if (x < 0) x += lbt;
  return x;
}
int fast_pow(int a, int t) {
  int ans = 1;
  for (int i = 31; i >= 0; i--) {
    ans = (long long)ans * ans % lbt;
    if (t >> i & 1) ans = (long long)ans * a % lbt;
  }
  return ans;
}
