#include <bits/stdc++.h>
using namespace std;
void fft(complex<double> a[], int n, int sign = +1) {
  const double theta = 8 * sign * atan(1.0) / n;
  for (int i = 0, j = 1; j < n - 1; ++j) {
    for (int k = n >> 1; k > (i ^= k); k >>= 1)
      ;
    if (j < i) swap(a[i], a[j]);
  }
  for (int m, mh = 1; (m = mh << 1) <= n; mh = m)
    for (int i = 0, irev = 0; i < n; i += m) {
      complex<double> w = exp(complex<double>(0, theta * irev));
      for (int k = n >> 2; k > (irev ^= k); k >>= 1)
        ;
      for (int j = i; j < mh + i; ++j) {
        int k = j + mh;
        complex<double> x = a[j] - a[k];
        a[j] += a[k];
        a[k] = w * x;
      }
    }
}
template <typename T>
pair<vector<complex<double>>, vector<complex<double>>> ffts(const vector<T> &a,
                                                            const vector<T> &b,
                                                            int n) {
  assert(n >= 1 && (n & (n - 1)) == 0);
  vector<complex<double>> p(n), pa(n), pb(n);
  for (int i = 0; i < n; ++i)
    p[i] = complex<double>(i < a.size() ? a[i] : 0, i < b.size() ? b[i] : 0);
  fft(p.data(), n, +1);
  for (int i = 0; i < n; ++i) {
    int j = (n - i) & (n - 1);
    complex<double> u = p[i], v = conj(p[j]);
    pa[i] = (u + v) * complex<double>(0.5, +0.0);
    pb[i] = (u - v) * complex<double>(0.0, -0.5);
  }
  return make_pair(move(pa), move(pb));
}
vector<long long> convolve(const vector<int> &a, const vector<int> &b) {
  int n = a.size() + b.size() - 1, m = 1;
  while (m < n) m *= 2;
  vector<complex<double>> pa, pb;
  tie(pa, pb) = ffts(a, b, m);
  for (int i = 0; i < m; ++i) {
    pa[i] /= m;
    pa[i] *= pb[i];
  }
  fft(pa.data(), m, -1);
  vector<long long> ans(n);
  for (int i = 0; i < n; ++i) ans[i] = llround(real(pa[i]));
  return ans;
}
vector<int> convolve(const vector<int> &a, const vector<int> &b, int mod) {
  int n = a.size() + b.size() - 1;
  for (int k : {1, 2, 4, 8, 16}) n |= (n >> k);
  ++n;
  vector<complex<double>> pa(n), pb(n);
  for (int i = 0; i < n; ++i) {
    if (i < a.size())
      pa[i] = complex<double>(a[i] >> 15, a[i] & ((1 << 15) - 1));
    if (i < b.size())
      pb[i] = complex<double>(b[i] >> 15, b[i] & ((1 << 15) - 1));
  }
  fft(pa.data(), n, +1);
  fft(pb.data(), n, +1);
  vector<complex<double>> c(n), d(n);
  for (int i = 0; i < n; ++i) {
    int j = (n - i) & (n - 1);
    complex<double> u = (pa[i] + conj(pa[j])) * complex<double>(0.5, +0.0);
    complex<double> v = (pa[i] - conj(pa[j])) * complex<double>(0.0, -0.5);
    complex<double> x = (pb[i] + conj(pb[j])) * complex<double>(0.5, +0.0);
    complex<double> y = (pb[i] - conj(pb[j])) * complex<double>(0.0, -0.5);
    c[i] = u * (x + y * complex<double>(0, 1));
    d[i] = v * (x + y * complex<double>(0, 1));
    c[i] /= n;
    d[i] /= n;
  }
  fft(c.data(), n, -1);
  fft(d.data(), n, -1);
  vector<int> ans(a.size() + b.size() - 1);
  for (int i = 0; i < (int)ans.size(); ++i) {
    int u = llround(real(c[i])) % mod;
    int v = llround(imag(c[i])) % mod;
    int x = llround(real(d[i])) % mod;
    int y = llround(imag(d[i])) % mod;
    ans[i] = ((long long)u * (1 << 30) % mod +
              (long long)(v + x) * (1 << 15) % mod + y) %
             mod;
  }
  return ans;
}
unordered_map<int, vector<int>> memo;
int k;
vector<vector<int>> bases{
    {1, 0, 0, 0}, {1, 1, 0, 0}, {1, 3, 1, 0}, {1, 5, 5, 1}};
void solve(int n, int mod) {
  if (memo.find(n) == memo.end()) {
    vector<int> ret(k + 1, 0);
    ret[0] = 1;
    if (n <= 3) {
      for (int i = 0, j = min(k, 3); i <= j; ++i) {
        ret[i] = bases[n][i];
      }
    } else {
      vector<int> p, q;
      solve(n / 2 - 1, mod);
      vector<int> a = memo[n / 2 - 1];
      solve(n / 2, mod);
      vector<int> b = memo[n / 2];
      if (n % 2) {
        vector<int> c(k + 1, 1);
        for (int i = 1; i <= k; ++i) {
          c[i] = a[i - 1] + b[i - 1];
          if (c[i] >= mod) {
            c[i] -= mod;
          }
          c[i] += b[i];
          if (c[i] >= mod) {
            c[i] -= mod;
          }
        }
        memo[n / 2 + 1] = c;
        p = convolve(a, b, mod);
        q = convolve(b, c, mod);
      } else {
        p = convolve(a, a, mod);
        q = convolve(b, b, mod);
      }
      for (int i = 1; i <= k; ++i) {
        ret[i] = p[i - 1] + q[i];
        if (ret[i] >= mod) {
          ret[i] -= mod;
        }
      }
    }
    memo[n] = ret;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n >> k;
  solve(n, 998244353);
  vector<int> sol = memo[n];
  for (int i = 1; i <= k; ++i) {
    cout << sol[i] << " ";
  }
  cout << "\n";
  return 0;
}
