#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 16;
const int M = 1 << 15;
const int P = (476 << 21) + 1;
const int G = 3;
const int NUM = 20;
int wn[NUM];
int mul(int x, int y) {
  long long z = 1LL * x * y;
  return z - z / P * P;
}
int add(int x, int y) {
  x += y;
  if (x >= P) x -= P;
  return x;
}
int quick_mod(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = mul(ans, a);
    b >>= 1;
    a = mul(a, a);
  }
  return ans;
}
void GetWn() {
  for (int i = 0; i < NUM; i++) {
    int t = 1 << i;
    wn[i] = quick_mod(G, (P - 1) / t);
  }
}
void rader(int a[], int len) {
  int j = len >> 1;
  for (int i = 1; i < len - 1; ++i) {
    if (i < j) swap(a[i], a[j]);
    int k = len >> 1;
    while (j >= k) {
      j -= k;
      k >>= 1;
    }
    if (j < k) j += k;
  }
}
void NTT(int a[], int len, int t) {
  rader(a, len);
  int id = 0;
  for (int h = 2; h <= len; h <<= 1) {
    id++;
    for (int j = 0; j < len; j += h) {
      int w = 1;
      for (int k = j; k < j + h / 2; ++k) {
        int u = a[k];
        int t = mul(w, a[k + h / 2]);
        a[k] = add(u, t);
        a[k + h / 2] = add(u, P - t);
        w = mul(w, wn[id]);
      }
    }
  }
  if (t == -1) {
    for (int i = 1; i < len / 2; i++) swap(a[i], a[len - i]);
    int inv = quick_mod(len, P - 2);
    for (int i = 0; i < len; i++) a[i] = mul(a[i], inv);
  }
}
int fa[N], fb[N], fc[N], fd[N];
int a[N], b[N], c[N];
void solve(int n) {
  if (n == 0) {
    a[0] = b[0] = b[1] = 1;
    return;
  }
  if (n == 1) {
    a[0] = a[1] = 1;
    b[1] = 3;
    b[0] = b[2] = 1;
    return;
  }
  int i;
  solve(n / 2 - 1);
  c[0] = 1;
  for (i = 1; i < M; i++) c[i] = add(add(b[i], b[i - 1]), a[i - 1]);
  for (; i < N; i++) c[i] = 0;
  NTT(a, N, 1);
  NTT(b, N, 1);
  NTT(c, N, 1);
  for (i = 0; i < N; i++) {
    fa[i] = mul(a[i], a[i]);
    fb[i] = mul(a[i], b[i]);
    fc[i] = mul(b[i], b[i]);
    fd[i] = mul(b[i], c[i]);
  }
  NTT(fa, N, -1);
  NTT(fb, N, -1);
  NTT(fc, N, -1);
  NTT(fd, N, -1);
  if (n & 1) {
    a[0] = b[0] = c[0] = 1;
    for (i = 1; i < M; i++) {
      a[i] = add(fc[i], fa[i - 1]);
      b[i] = add(fd[i], fb[i - 1]);
      c[i] = add(add(b[i], b[i - 1]), a[i - 1]);
    }
    for (i = 0; i < M; i++) {
      a[i] = b[i];
      b[i] = c[i];
    }
  } else {
    a[0] = b[0] = 1;
    for (i = 1; i < M; i++) {
      a[i] = add(fc[i], fa[i - 1]);
      b[i] = add(fd[i], fb[i - 1]);
    }
  }
  for (; i < N; i++) a[i] = b[i] = 0;
}
int main() {
  int n, k;
  GetWn();
  scanf("%d%d", &n, &k);
  solve(n);
  for (int i = 1; i <= k; i++) printf("%d%c", a[i], " \n"[i == k]);
  return 0;
}
