#include <bits/stdc++.h>
using namespace std;
int mult(int x, int y) {
  long long int ans, x1 = (long long int)x, y1 = (long long int)y;
  ans = (x1 * y1) % 998244353;
  return (int)ans;
}
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int lcm(int a, int b) { return a * (b / gcd(a, b)); }
long long int pow1(long long int a, long long int b) {
  long long int ans = 1;
  while (b > 0) {
    if (b & 1) ans = (ans * a) % 998244353;
    a = (a * a) % 998244353;
    b >>= 1;
  }
  return ans;
}
long long int k;
namespace FFT {
const int maxBase = 21;
const int maxN = 1 << maxBase;
struct num {
  double x, y;
  num() {}
  num(double xx, double yy) : x(xx), y(yy) {}
  num(double alp) : x(cos(alp)), y(sin(alp)) {}
};
inline num operator+(num a, num b) { return num(a.x + b.x, a.y + b.y); }
inline num operator-(num a, num b) { return num(a.x - b.x, a.y - b.y); }
inline num operator*(num a, num b) {
  return num(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
inline num conj(num a) { return num(a.x, -a.y); }
const double PI = acos(-1);
num root[maxN];
int rev[maxN];
bool rootsPrepared = false;
void prepRoots() {
  if (rootsPrepared) return;
  rootsPrepared = true;
  root[1] = num(1, 0);
  for (int k = 1; k < maxBase; k++) {
    num x(2 * PI / (1LL << (k + 1)));
    for (int i = (1LL << (k - 1)); i < (1LL << (k)); i++) {
      root[2 * i] = root[i];
      root[2 * i + 1] = root[i] * x;
    }
  }
}
int base, N;
int lastRevN = -1;
void prepRev() {
  if (lastRevN == N) return;
  lastRevN = N;
  for (int i = 0; i < N; i++)
    rev[i] = (rev[i >> 1] >> 1) + ((i & 1) << (base - 1));
}
void fft(num *a, num *f) {
  for (int i = 0; i < N; i++) f[i] = a[rev[i]];
  for (int k = 1; k < N; k <<= 1)
    for (int i = 0; i < N; i += 2 * k)
      for (int j = 0; j < k; j++) {
        num z = f[i + j + k] * root[j + k];
        f[i + j + k] = f[i + j] - z;
        f[i + j] = f[i + j] + z;
      }
}
num a[maxN], b[maxN], f[maxN], g[maxN];
long long int A[maxN], B[maxN], C[maxN];
void _multMod(int mod) {
  for (int i = 0; i < N; i++) {
    int x = A[i] % mod;
    a[i] = num(x & ((1LL << (15)) - 1), x >> 15);
  }
  for (int i = 0; i < N; i++) {
    int x = B[i] % mod;
    b[i] = num(x & ((1LL << (15)) - 1), x >> 15);
  }
  fft(a, f);
  fft(b, g);
  for (int i = 0; i < N; i++) {
    int j = (N - i) & (N - 1);
    num a1 = (f[i] + conj(f[j])) * num(0.5, 0);
    num a2 = (f[i] - conj(f[j])) * num(0, -0.5);
    num b1 = (g[i] + conj(g[j])) * num(0.5 / N, 0);
    num b2 = (g[i] - conj(g[j])) * num(0, -0.5 / N);
    a[j] = a1 * b1 + a2 * b2 * num(0, 1);
    b[j] = a1 * b2 + a2 * b1;
  }
  fft(a, f);
  fft(b, g);
  for (int i = 0; i < N; i++) {
    long long int aa = f[i].x + 0.5;
    long long int bb = g[i].x + 0.5;
    long long int cc = f[i].y + 0.5;
    C[i] =
        (aa + bb % 998244353 * (1LL << (15)) + cc % 998244353 * (1LL << (30))) %
        998244353;
  }
}
void prepAB(int n1, int n2) {
  base = 1;
  N = 2;
  while (N < n1 + n2) base++, N <<= 1;
  for (int i = n1; i < N; i++) A[i] = 0;
  for (int i = n2; i < N; i++) B[i] = 0;
  prepRoots();
  prepRev();
}
void mult(int n1, int n2) {
  prepAB(n1, n2);
  for (int i = 0; i < N; i++) a[i] = num(A[i], B[i]);
  fft(a, f);
  for (int i = 0; i < N; i++) {
    int j = (N - i) & (N - 1);
    a[i] = (f[j] * f[j] - conj(f[i] * f[i])) * num(0, -0.25 / N);
  }
  fft(a, f);
  for (int i = 0; i < N; i++) C[i] = (long long int)round(f[i].x);
}
void multMod(int n1, int n2, int mod) {
  prepAB(n1, n2);
  _multMod(mod);
}
int D[maxN];
void multLL(int n1, int n2) {
  prepAB(n1, n2);
  int mod1 = 1.5e9;
  int mod2 = mod1 + 1;
  _multMod(mod1);
  for (int i = 0; i < N; i++) D[i] = C[i];
  _multMod(mod2);
  for (int i = 0; i < N; i++)
    C[i] = D[i] + (C[i] - D[i] + (long long int)mod2) * (long long int)mod1 %
                      mod2 * mod1;
}
}  // namespace FFT
map<long long int, vector<long long int> > dp;
vector<long long int> solve(long long int n) {
  if (dp.find(n) != dp.end()) return dp[n];
  if (n == 0) {
    vector<long long int> res(k + 1, 0);
    res[0] = 1;
    return dp[n] = res;
  }
  if (n == 1) {
    vector<long long int> res(k + 1, 0);
    res[0] = res[1] = 1;
    return dp[n] = res;
  }
  vector<long long int> a = solve(n / 2);
  for (int i = 0; i < k + 1; i++) FFT::A[i] = FFT::B[i] = a[i];
  FFT::multMod(k + 1, k + 1, 998244353);
  vector<long long int> ans1(k + 1, 0), ans2(k + 1, 0);
  for (int i = 0; i < k + 1; i++) ans1[i] = FFT::C[i];
  a = solve(n / 2 - (n % 2 == 0));
  for (int i = 0; i < k + 1; i++) FFT::A[i] = FFT::B[i] = a[i];
  FFT::multMod(k + 1, k + 1, 998244353);
  for (int i = 1; i < k + 1; i++) ans2[i] = FFT::C[i - 1];
  vector<long long int> ans(k + 1, 0);
  for (int i = 0; i < k + 1; i++) ans[i] = (ans1[i] + ans2[i]) % 998244353;
  if (n % 2) {
    vector<long long int> a1 = solve(n / 2);
    vector<long long int> a2 = solve(n / 2 - 1);
    for (int i = 0; i < k; i++) {
      FFT::A[i] = a1[i];
      FFT::B[i] = a2[i];
    }
    FFT::multMod(k + 1, k + 1, 998244353);
    vector<long long int> ans3(k + 1, 0);
    for (int i = 1; i < k + 1; i++) ans3[i] = FFT::C[i - 1];
    for (int i = 0; i < k + 1; i++) ans[i] = (ans[i] + ans3[i] * 2) % 998244353;
  }
  return dp[n] = ans;
}
int main() {
  long long int n, i, j;
  scanf("%lld", &n);
  scanf("%lld", &k);
  vector<long long int> ans = solve(n);
  for (int i = 1; i < k + 1; i++) printf("%lld ", ans[i]);
  printf("\n");
  return 0;
}
