#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void rread(T& num) {
  num = 0;
  T f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') num = num * 10 + ch - '0', ch = getchar();
  num *= f;
}
const long long inf = 1e18;
const int maxn = (1 << 16) + 10, mod = 1e9 + 7;
const double pi = acos(-1);
long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }
void exgcd(long long a, long long b, long long& d, long long& x, long long& y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    exgcd(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long power(long long a, long long n) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
    }
    n >>= 1;
    a *= a;
  }
  return p;
}
long long power(long long a, long long n, long long mod) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
      p %= mod;
    }
    n >>= 1;
    a *= a;
    a %= mod;
  }
  return p % mod;
}
int n, m, r, c;
int a[maxn], b[maxn], g[maxn];
int wn[25];
const int MAXK = 1 << 15;
const int Mod = 998244353;
const int gg = 3;
const int P = 998244353;
int fp(int a, int k) {
  if (k < 0) a = fp(a, Mod - 2), k = -k;
  int res = 1;
  while (k) {
    if (k & 1) res = 1LL * res * a % Mod;
    a = 1LL * a * a % Mod;
    k >>= 1;
  }
  return res;
}
void change(int y[], int len) {
  for (int i = 1, j = len / 2; i < len - 1; i++) {
    if (i < j) swap(y[i], y[j]);
    int k = len / 2;
    while (j >= k) {
      j -= k;
      k /= 2;
    }
    if (j < k) j += k;
  }
}
void fft(int y[], int len, int on) {
  change(y, len);
  for (int h = 2; h <= len; h <<= 1) {
    int wn = fp(gg, -on * (Mod - 1) / h);
    for (int j = 0; j < len; j += h) {
      int w = 1;
      for (int k = j; k < j + h / 2; k++) {
        int u = y[k], v = 1LL * w * y[k + h / 2] % Mod;
        y[k] = (u + v) % Mod;
        y[k + h / 2] = (u - v + Mod) % Mod;
        w = 1LL * w * wn % Mod;
      }
    }
  }
  if (on == -1) {
    int t = fp(len, -1);
    for (int i = 0; i < len; i++) y[i] = 1LL * y[i] * t % Mod;
  }
}
map<int, int> fl;
int ans[100][maxn], all;
void dfs(int x) {
  if (fl.count(x) == 1) return;
  int mid = x / 2;
  dfs(mid);
  dfs(mid - 1);
  int c = fl[mid], c1;
  c1 = fl[mid - 1];
  for (int i = 0; i <= 2 * m; i++)
    if (i < m)
      a[i] = ans[c][i];
    else
      a[i] = 0;
  for (int i = 0; i <= 2 * m; i++)
    if (i < m)
      b[i] = ans[c1][i];
    else
      b[i] = 0;
  fft(a, 2 * m, 1);
  fft(b, 2 * m, 1);
  for (int i = 0; i <= 2 * m; i++) g[i] = (long long)a[i] * (long long)b[i] % P;
  for (int i = 0; i <= 2 * m; i++)
    a[i] = ((long long)a[i] * (long long)a[i]) % P;
  for (int i = 0; i <= 2 * m; i++) b[i] = (long long)b[i] * (long long)b[i] % P;
  fft(a, 2 * m, -1);
  all++;
  if (x % 2 == 0) {
    fft(b, 2 * m, -1);
    ans[all][0] = 1;
    for (int i = 1; i < m; i++) ans[all][i] = ((long long)a[i] + b[i - 1]) % P;
  } else {
    fft(g, 2 * m, -1);
    ans[all][0] = 1;
    for (int i = 1; i < m; i++)
      ans[all][i] = ((long long)a[i] + a[i - 1] + g[i - 1] + g[i - 1]) % P;
  }
  fl[x] = all;
}
int main() {
  int kase = 1;
  memset(ans, 0, sizeof(ans));
  while (~scanf("%d%d", &n, &r)) {
    m = 1;
    while (m <= r) {
      m += m;
    }
    all = 1;
    fl.clear();
    fl[1] = 1;
    fl[0] = 0;
    ans[1][0] = 1;
    ans[1][1] = 1;
    ans[0][0] = 1;
    dfs(n);
    int gg = fl[n];
    for (int i = 1; i <= r; i++) printf("%d ", ans[gg][i]);
    printf("\n");
  }
  return 0;
}
