#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chkmin(T& x, T y) {
  return x > y ? x = y, true : false;
}
template <class T>
inline bool chkmax(T& x, T y) {
  return x < y ? x = y, true : false;
}
inline long long read(void) {
  long long x, f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (x = 0; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return x * f;
}
int n, k, a[200005], b[200005], c[200005], d[200005], aa[200005], bb[200005], m,
    L;
inline long long ppow(long long a, long long b) {
  long long ret = 1;
  for (; b; b >>= 1) {
    if (b & 1) ret = ret * a % 998244353;
    a = a * a % 998244353;
  }
  return ret;
}
inline void R(int& x) {
  if (x >= 998244353) x -= 998244353;
}
void merge() {
  d[0] = 1;
  for (int i = (1); i <= (k); ++i)
    R(d[i] = a[i] + a[i - 1]), R(d[i] += b[i - 1]);
  for (int i = (0); i <= (k); ++i) b[i] = a[i], a[i] = d[i];
}
int _rev(int x) {
  int ret = 0;
  for (int i = (0); i <= (L - 1); ++i)
    if ((x >> i) & 1) ret |= 1 << (L - i - 1);
  return ret;
}
void rev(int* a) {
  int j;
  for (int i = (0); i <= (m - 1); ++i)
    if ((j = _rev(i)) > i) swap(a[i], a[j]);
}
void ntt(int* a, int x) {
  rev(a);
  for (int s = 2; s <= m; s <<= 1) {
    int w0 = ppow(3, (998244353 - 1) / s);
    if (x == -1) w0 = ppow(w0, 998244353 - 2);
    for (int k = 0; k < m; k += s) {
      int w = 1;
      for (int j = (0); j <= (s / 2 - 1); ++j) {
        int u = a[k + j], t = 1ll * w * a[k + j + s / 2] % 998244353;
        a[k + j] = (u + t) % 998244353;
        a[k + j + s / 2] = (u - t) % 998244353;
        R(a[k + j] += 998244353);
        R(a[k + j + s / 2] += 998244353);
        w = 1ll * w * w0 % 998244353;
      }
    }
  }
  int p = ppow(m, 998244353 - 2);
  if (x == -1)
    for (int i = (0); i <= (m - 1); ++i) a[i] = 1ll * a[i] * p % 998244353;
}
void dfs(int x) {
  if (x <= 3) {
    a[0] = a[1] = 1;
    b[0] = 1;
    if (x <= 1) return;
    a[0] = a[2] = 1;
    a[1] = 3;
    b[0] = b[1] = 1;
    if (x <= 2) return;
    merge();
    return;
  }
  bool flag = x & 1;
  if (x & 1) x--;
  dfs((x >> 1) - 1);
  for (int i = (0); i <= (k); ++i) c[i] = b[i];
  for (int i = (k + 1); i <= (m - 1); ++i) c[i] = 0;
  merge();
  ntt(a, 1);
  ntt(b, 1);
  ntt(c, 1);
  for (int i = (0); i <= (k); ++i) aa[i] = 0;
  for (int i = (0); i <= (m - 1); ++i) d[i] = 1ll * a[i] * a[i] % 998244353;
  ntt(d, -1);
  for (int i = (0); i <= (k); ++i) R(aa[i] += d[i]);
  for (int i = (0); i <= (m - 1); ++i) d[i] = 1ll * b[i] * b[i] % 998244353;
  ntt(d, -1);
  for (int i = (1); i <= (k); ++i) R(aa[i] += d[i - 1]);
  for (int i = (0); i <= (k); ++i) bb[i] = 0;
  for (int i = (0); i <= (m - 1); ++i) d[i] = 1ll * a[i] * b[i] % 998244353;
  ntt(d, -1);
  for (int i = (0); i <= (k); ++i) R(bb[i] += d[i]);
  for (int i = (0); i <= (m - 1); ++i) d[i] = 1ll * b[i] * c[i] % 998244353;
  ntt(d, -1);
  for (int i = (1); i <= (k); ++i) R(bb[i] += d[i - 1]);
  for (int i = (0); i <= (k); ++i) a[i] = aa[i], b[i] = bb[i];
  for (int i = (k + 1); i <= (m - 1); ++i) a[i] = b[i] = 0;
  if (flag) merge();
}
int main(void) {
  n = read();
  k = read();
  m = 1;
  L = 0;
  while (m < k * 2) m <<= 1, L++;
  if (n == 1) swap(a, b);
  dfs(n);
  for (int i = (1); i <= (k); ++i) printf("%d ", a[i]);
  return 0;
}
