// https://codeforces.com/contest/1158/submission/54045740 (ecnerwala)
// upsolve with rainboy
import java.io.*;
import java.util.*;

public class CF1158F {
	static final int MD = 998244353;
	static long power(int a, int k) {
		if (k == 0)
			return 1;
		long p = power(a, k / 2);
		p = p * p % MD;
		if (k % 2 == 1)
			p = p * a % MD;
		return p;
	}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());
		st = new StringTokenizer(br.readLine());
		int[] aa = new int[n];
		for (int i = 0; i < n; i++)
			aa[i] = Integer.parseInt(st.nextToken()) - 1;
		int[] p2 = new int[n + 1];
		int[] p2m1 = new int[n + 1];
		int[] p2m1_ = new int[n + 1];
		for (int i = 0, p = 1; i <= n; i++) {
			p2m1_[i] = (int) power(p2m1[i] = (p2[i] = p) - 1, MD - 2);
			p = p * 2 % MD;
		}
		int[][] dp = new int[n + 1][n / c + 1];
		dp[0][0] = 1;
		if (c > 10) {
			int[] kk = new int[c];
			for (int j = 0; j < n; j++) {
				Arrays.fill(kk, 0);
				long w = 1;
				int bad = c - 1;
				for (int i = j; i >= 0; i--) {
					if (aa[i] != aa[j]) {
						if (kk[aa[i]] == 0)
							bad--;
						else
							w = w * p2m1_[kk[aa[i]]] % MD;
						w = w * p2m1[++kk[aa[i]]] % MD;
					}
					if (bad == 0)
						for (int l = 0; l <= i / c; l++) {
							int x = dp[i][l];
							if (x != 0)
								dp[j + 1][l + 1] = (int) ((dp[j + 1][l + 1] + w * x) % MD);
						}
				}
			}
		} else {
			int[][] dq = new int[1 << c][n / c + 1];
			dq[0][0] = 1;
			for (int j = 0; j < n; j++) {
				for (int b = (1 << c) - 1; b >= 0; b--) {
					int b_ = b | 1 << aa[j];
					for (int l = 0; l <= j / c; l++)
						dq[b_][l] = (dq[b_][l] + dq[b][l]) % MD;
				}
				for (int l = 0; l < (j + 1) / c; l++) {
					int x = dq[(1 << c) - 1][l];
					if (x != 0) {
						dp[j + 1][l + 1] = x;
						dq[0][l + 1] = (dq[0][l + 1] + x) % MD;
						dq[(1 << c) - 1][l] = 0;
					}
				}
			}
		}
		int[] ans = new int[n + 1];
		for (int i = 0; i <= n; i++)
			for (int l = 0; l <= n / c; l++)
				ans[l] = (int) ((ans[l] + (long) dp[i][l] * p2[n - i]) % MD);
		ans[0] = (ans[0] - 1 + MD) % MD;
		for (int i = 0; i < n; i++)
			ans[i] = (ans[i] - ans[i + 1] + MD) % MD;
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i <= n; i++)
			sb.append(ans[i] + " ");
		System.out.println(sb);
	}
}
