#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int G = 3, iG = 332748118, inv2 = 499122177;
const int maxn = 262144;
inline int read() {
  char c = getchar();
  int out = 0;
  while (!(c >= '0' && c <= '9')) c = getchar();
  while (c >= '0' && c <= '9') out = out * 10 + c - '0', c = getchar();
  return out;
}
inline int add(int a, int b) {
  if ((a += b) >= mod) a -= mod;
  return a;
}
inline void add_(int &a, int b) {
  if ((a += b) >= mod) a -= mod;
}
inline int dec(int a, int b) {
  if ((a -= b) < 0) a += mod;
  return a;
}
inline void dec_(int &a, int b) {
  if ((a -= b) < 0) a += mod;
}
inline int mult(int a, int b) {
  long long t = 1ll * a * b;
  if (t >= mod) t %= mod;
  return t;
}
inline int power(int a, int b) {
  int out = 1;
  while (b) {
    if (b & 1) out = mult(out, a);
    a = mult(a, a);
    b >>= 1;
  }
  return out;
}
namespace polynomial {
int up[maxn + 5];
void init_up() {
  up[0] = up[1] = 0;
  for (int i = 1; (1 << i) <= maxn; i++) {
    for (int j = ((1 << (i - 1)) + 1); j <= (1 << i); j++) up[j] = i;
  }
}
int R[maxn + 5], pw[maxn + 5], ipw[maxn + 5];
void init_pw() {
  init_up();
  for (int i = 1; i <= maxn; i++)
    pw[i] = power(G, (mod - 1) / (i << 1)),
    ipw[i] = power(iG, (mod - 1) / (i << 1));
}
void init_R(int len) {
  for (int i = 0; i < (1 << len); i++)
    R[i] = (R[i >> 1] >> 1) | ((i & 1) << (len - 1));
}
inline void dft(vector<int> &A, int len, int flag, bool reinit = 1) {
  int L = up[len];
  if (reinit) init_R(L);
  for (int i = 0; i < (1 << L); i++)
    if (i < R[i]) swap(A[i], A[R[i]]);
  for (int i = 1; i < (1 << L); i <<= 1) {
    int bas = (flag == 1) ? pw[i] : ipw[i];
    for (int j = 0; j < (1 << L); j += (i << 1)) {
      int t = 1;
      for (int k = 0; k < i; k++, t = mult(t, bas)) {
        int nx = A[j + k], ny = mult(A[i + j + k], t);
        A[j + k] = add(nx, ny);
        A[i + j + k] = dec(nx, ny);
      }
    }
  }
  if (flag == -1) {
    int iL = power(1 << L, mod - 2);
    for (int i = 0; i < (1 << L); i++) A[i] = mult(A[i], iL);
  }
}
inline vector<int> Mult(vector<int> A, vector<int> B) {
  int totlen = 1 << up[A.size() + B.size() - 1];
  A.resize(totlen);
  B.resize(totlen);
  dft(A, totlen, 1);
  dft(B, totlen, 1, 0);
  for (int i = 0; i < totlen; i++) A[i] = mult(A[i], B[i]);
  dft(A, totlen, -1, 0);
  A.resize(A.size() + B.size() - 1);
  return A;
}
inline void Mult_ref(vector<int> &A, vector<int> B) {
  int totlen = 1 << up[A.size() + B.size() - 1];
  A.resize(totlen);
  B.resize(totlen);
  dft(A, totlen, 1);
  dft(B, totlen, 1, 0);
  for (int i = 0; i < totlen; i++) A[i] = mult(A[i], B[i]);
  dft(A, totlen, -1, 0);
  A.resize(A.size() + B.size() - 1);
}
inline vector<int> Add(vector<int> A, vector<int> B) {
  vector<int> ret(max(A.size(), B.size()));
  for (int i = 0; i < ret.size(); i++) {
    if (i < A.size()) ret[i] = A[i];
    if (i < B.size()) ret[i] = add(ret[i], B[i]);
  }
  return ret;
}
inline vector<int> inverse(vector<int> A, int len) {
  vector<int> B(1, power(A[0], mod - 2));
  for (int L = 2; L <= len; L <<= 1) {
    vector<int> tA = A;
    tA.resize(L);
    tA.resize(L << 1);
    B.resize(L << 1);
    dft(tA, L << 1, 1);
    dft(B, L << 1, 1, 0);
    for (int i = 0; i < (L << 1); i++)
      B[i] = mult(B[i], dec(2, mult(tA[i], B[i])));
    dft(B, L << 1, -1, 0);
    B.resize(L);
  }
  return B;
}
inline vector<int> inverse(vector<int> A) {
  int len = A.size();
  A.resize(1 << up[A.size()]);
  vector<int> ret = inverse(A, A.size());
  ret.resize(len);
  return ret;
}
inline vector<int> derivative(vector<int> A) {
  for (int i = 0; i + 1 < A.size(); i++) A[i] = mult(i + 1, A[i + 1]);
  A.pop_back();
  return A;
}
inline vector<int> integral(vector<int> A) {
  vector<int> ret(A.size() + 1, 0);
  for (int i = 0; i < A.size(); i++)
    ret[i + 1] = mult(A[i], power(i + 1, mod - 2));
  return ret;
}
inline vector<int> ln(vector<int> A) {
  int len = A.size();
  A = integral(Mult(derivative(A), inverse(A)));
  A.resize(len);
  return A;
}
inline vector<int> exp(vector<int> A, int len) {
  vector<int> B(1, 1);
  for (int L = 2; L <= len; L <<= 1) {
    vector<int> tA = A;
    tA.resize(L);
    B.resize(L);
    vector<int> tB = ln(B);
    for (int i = 0; i < L; i++) tA[i] = dec(tA[i], tB[i]);
    tA[0] = add(tA[0], 1);
    tA.resize(L << 1);
    B.resize(L << 1);
    dft(tA, L << 1, 1);
    dft(B, L << 1, 1, 0);
    for (int i = 0; i < (L << 1); i++) B[i] = mult(B[i], tA[i]);
    dft(B, L << 1, -1, 0);
    B.resize(L);
  }
  return B;
}
inline vector<int> exp(vector<int> A) {
  int len = A.size();
  A.resize(1 << up[A.size()]);
  A = exp(A, 1 << up[A.size()]);
  A.resize(len);
  return A;
}
inline vector<int> sqrt(vector<int> A, int len) {
  vector<int> B(1, 1);
  for (int L = 2; L <= len; L <<= 1) {
    vector<int> tA = A;
    tA.resize(L);
    B.resize(L);
    vector<int> tB = Mult(tA, inverse(B));
    tB.resize(L);
    for (int i = 0; i < L; i++) B[i] = mult(add(tB[i], B[i]), inv2);
  }
  return B;
}
inline vector<int> sqrt(vector<int> A) {
  int len = A.size();
  A.resize(1 << up[A.size()]);
  A = sqrt(A, 1 << up[A.size()]);
  A.resize(len);
  return A;
}
inline vector<int> Power(vector<int> A, int K) {
  int pos = -1;
  for (int i = 0; i < A.size(); i++) {
    if (A[i]) {
      pos = i;
      break;
    }
  }
  if (pos == -1) return A;
  if (pos * K >= A.size()) return vector<int>(A.size());
  int iv = power(A[pos], mod - 2);
  vector<int> B(A.size() - pos);
  for (int i = pos; i < A.size(); i++) B[i - pos] = mult(A[i], iv);
  B = ln(B);
  for (auto &x : B) x = mult(x, K);
  B = exp(B);
  B.resize(A.size());
  int pw = power(A[pos], K);
  for (int i = A.size() - 1; i >= K * pos; i--) B[i] = mult(B[i - K * pos], pw);
  for (int i = 0; i < K * pos; i++) B[i] = 0;
  return B;
}
}  // namespace polynomial
using namespace polynomial;
int n, K;
int main() {
  init_pw();
  scanf("%d%d", &n, &K);
  vector<int> delta({1, 6, 1});
  delta.resize(K + 1);
  delta = sqrt(delta);
  vector<int> d1 = delta;
  d1[0] = add(d1[0], 1);
  d1[1] = add(d1[1], 1);
  for (int &x : d1) x = mult(x, inv2);
  vector<int> &st1 = d1;
  st1 = Power(d1, n + 1);
  st1 = Mult(st1, inverse(delta));
  for (int i = 1; i <= K; i++) printf("%d ", i > n ? 0 : st1[i]);
  return 0;
}
