#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
long long qpow(long long a, long long b, long long mod) {
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
const long long mod = 998244353;
const long long G = 3;
const long long invG = qpow(G, mod - 2, mod);
const long long inv2 = qpow(2ll, mod - 2, mod);
int tr[N];
int getLen(int n) {
  int len = 1;
  while (len < (n << 1)) len <<= 1;
  for (int i = 0; i < len; i++)
    tr[i] = (tr[i >> 1] >> 1) | (i & 1 ? len >> 1 : 0);
  return len;
}
void NTT(long long *A, int len, int type) {
  for (int i = 0; i < len; i++)
    if (i < tr[i]) swap(A[i], A[tr[i]]);
  for (int i = 2; i <= len; i <<= 1) {
    int mid = i / 2;
    long long Wn = qpow(type == 1 ? G : invG, (mod - 1) / i, mod);
    for (int k = 0; k < len; k += i) {
      long long w = 1;
      for (int l = k; l < k + mid; l++) {
        long long t = w * A[l + mid] % mod;
        A[l + mid] = (A[l] - t + mod) % mod;
        A[l] = (A[l] + t) % mod;
        w = w * Wn % mod;
      }
    }
  }
  if (type == -1) {
    long long invn = qpow(len, mod - 2, mod);
    for (int i = 0; i < len; i++) A[i] = A[i] * invn % mod;
  }
}
void getDer(long long *f, long long *g, int len) {
  for (int i = 1; i < len; i++) g[i - 1] = f[i] * i % mod;
  g[len - 1] = 0;
}
void getInt(long long *f, long long *g, int len) {
  for (int i = 1; i < len; i++) g[i] = f[i - 1] * qpow(i, mod - 2, mod) % mod;
  g[0] = 0;
}
void getInv(long long *f, long long *g, int n) {
  if (n == 1) return (void)(g[0] = qpow(f[0], mod - 2, mod));
  getInv(f, g, (n + 1) >> 1);
  int len = getLen(n);
  static long long a[N];
  for (int i = 0; i < len; ++i) a[i] = i < n ? f[i] : 0;
  NTT(a, len, 1), NTT(g, len, 1);
  for (int i = 0; i < len; i++)
    g[i] = 1LL * (2 - 1LL * a[i] * g[i] % mod + mod) % mod * g[i] % mod;
  NTT(g, len, -1);
  for (int i = n; i < len; i++) g[i] = 0;
}
void getLn(long long *f, long long *g, int n) {
  static long long a[N], b[N];
  getDer(f, a, n);
  getInv(f, b, n);
  int len = getLen(n);
  NTT(a, len, 1), NTT(b, len, 1);
  for (int i = 0; i < len; i++) a[i] = a[i] * b[i] % mod;
  NTT(a, len, -1);
  getInt(a, g, len);
  for (int i = n; i < len; i++) g[i] = 0;
  for (int i = 0; i < len; i++) a[i] = b[i] = 0;
}
void getExp(long long *f, long long *g, int n) {
  if (n == 1) return (void)(g[0] = 1);
  getExp(f, g, (n + 1) >> 1);
  static long long a[N];
  getLn(g, a, n);
  a[0] = (f[0] + 1 - a[0] + mod) % mod;
  for (int i = 1; i < n; i++) a[i] = (f[i] - a[i] + mod) % mod;
  int len = getLen(n);
  NTT(a, len, 1), NTT(g, len, 1);
  for (int i = 0; i < len; i++) g[i] = g[i] * a[i] % mod;
  NTT(g, len, -1);
  for (int i = n; i < len; i++) g[i] = 0;
  for (int i = 0; i < len; i++) a[i] = 0;
}
void getPow(long long *f, long long *g, int n, long long k) {
  static long long a[N];
  getLn(f, a, n);
  for (int i = 0; i < n; i++) a[i] = a[i] * k % mod;
  getExp(a, g, n);
  for (int i = 0, len = getLen(n); i < len; i++) a[i] = 0;
}
struct Complex {
  long long x, y;
};
long long w;
Complex mul(Complex a, Complex b, long long mod) {
  Complex ans = {0, 0};
  ans.x = ((a.x * b.x % mod + a.y * b.y % mod * w % mod) % mod + mod) % mod;
  ans.y = ((a.x * b.y % mod + a.y * b.x % mod) % mod + mod) % mod;
  return ans;
}
long long binpow_imag(Complex a, long long b, long long mod) {
  Complex ans = {1, 0};
  while (b) {
    if (b & 1) ans = mul(ans, a, mod);
    a = mul(a, a, mod);
    b >>= 1;
  }
  return ans.x % mod;
}
long long cipolla(long long n, long long mod) {
  srand(time(0));
  n %= mod;
  if (mod == 2) return n;
  if (qpow(n, (mod - 1) / 2, mod) == mod - 1) return -1;
  long long a;
  while (1) {
    a = rand() % mod;
    w = ((a * a % mod - n) % mod + mod) % mod;
    if (qpow(w, (mod - 1) / 2, mod) == mod - 1) break;
  }
  Complex x = {a, 1};
  return binpow_imag(x, (mod + 1) / 2, mod);
}
void getSqrt(long long *f, long long *g, int n) {
  if (n == 1) {
    if (f[0] == 0)
      g[0] = f[0];
    else {
      long long t = cipolla(f[0], mod);
      g[0] = min(t, mod - t);
    }
    return;
  }
  getSqrt(f, g, (n + 1) >> 1);
  int len = getLen(n);
  static long long a[N], b[N];
  for (int i = 0; i < len; ++i) a[i] = i < n ? f[i] : 0;
  getInv(g, b, n);
  NTT(a, len, 1), NTT(b, len, 1);
  for (int i = 0; i < len; i++) a[i] = 1ll * a[i] * b[i] % mod;
  NTT(a, len, -1);
  for (int i = 0; i < n; i++) g[i] = (g[i] + a[i]) % mod * inv2 % mod;
  for (int i = n; i < len; i++) g[i] = 0;
  for (int i = 0; i < len; i++) a[i] = b[i] = 0;
}
long long a[N], b[N], f[N], g[N];
int main() {
  int k, n;
  scanf("%d%d", &k, &n);
  int m = n + 1;
  n = min(n, k) + 1;
  a[0] = 1, a[1] = 6, a[2] = 1;
  getSqrt(a, b, n);
  for (int i = 0; i < n; i++) a[i] = b[i];
  a[0] = (a[0] + 1) % mod, a[1] = (a[1] + 1) % mod;
  for (int i = 0; i < n; i++) a[i] = a[i] * inv2 % mod;
  getPow(a, f, n, k + 1);
  getInv(b, g, n);
  int len = getLen(n);
  NTT(f, len, 1), NTT(g, len, 1);
  for (int i = 0; i < len; i++) f[i] = f[i] * g[i] % mod;
  NTT(f, len, -1);
  for (int i = 1; i < n; i++) printf("%lld ", f[i]);
  for (int i = n; i < m; i++) printf("0 ");
  return 0;
}
