#include <bits/stdc++.h>
long long power(int a, int k) {
  long long p;
  if (k == 0) return 1;
  p = power(a, k / 2);
  p = p * p % 998244353;
  if (k % 2 == 1) p = p * a % 998244353;
  return p;
}
int main() {
  static int p2m1[3000 + 1], p2m1_[3000 + 1], p2[3000 + 1];
  static int aa[3000], kk[3000], dp[3000 + 1][3000 + 1], dq[1 << 11][3000 + 1],
      ans[3000 + 1];
  int n, c, p, i, j, b, b_, l, bad, x;
  long long w;
  scanf("%d%d", &n, &c);
  for (i = 0; i < n; i++) scanf("%d", &aa[i]), aa[i]--;
  for (i = 0, p = 1; i <= n; i++) {
    p2m1_[i] = power(p2m1[i] = (p2[i] = p) - 1, 998244353 - 2);
    p = p * 2 % 998244353;
  }
  dp[0][0] = 1;
  if (c > 11) {
    for (j = 0; j < n; j++) {
      memset(kk, 0, sizeof kk);
      w = 1;
      bad = c - 1;
      for (i = j; i >= 0; i--) {
        if (aa[i] != aa[j]) {
          if (kk[aa[i]] == 0)
            bad--;
          else
            w = w * p2m1_[kk[aa[i]]] % 998244353;
          w = w * p2m1[++kk[aa[i]]] % 998244353;
        }
        if (bad == 0)
          for (l = 0; l <= i / c; l++) {
            x = dp[i][l];
            if (x) dp[j + 1][l + 1] = (dp[j + 1][l + 1] + w * x) % 998244353;
          }
      }
    }
  } else {
    dq[0][0] = 1;
    for (j = 0; j < n; j++) {
      for (b = (1 << c) - 1; b >= 0; b--) {
        b_ = b | 1 << aa[j];
        for (l = 0; l <= j / c; l++)
          dq[b_][l] = (dq[b_][l] + dq[b][l]) % 998244353;
      }
      for (l = 0; l < (j + 1) / c; l++) {
        x = dq[(1 << c) - 1][l];
        if (x) {
          dp[j + 1][l + 1] = x;
          dq[0][l + 1] = (dq[0][l + 1] + x) % 998244353;
          dq[(1 << c) - 1][l] = 0;
        }
      }
    }
  }
  for (i = 0; i <= n; i++)
    for (l = 0; l <= n / c; l++)
      ans[l] = (ans[l] + (long long)dp[i][l] * p2[n - i]) % 998244353;
  ans[0] = (ans[0] - 1 + 998244353) % 998244353;
  for (i = 0; i < n; i++)
    ans[i] = (ans[i] - ans[i + 1] + 998244353) % 998244353;
  for (i = 0; i <= n; i++) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
