#include <bits/stdc++.h>
using namespace std;
long long qpow(long long a, long long b) {
  long long r = 1;
  while (b) {
    if (b & 1) r = r * a % 998244353;
    a = a * a % 998244353, b >>= 1;
  }
  return r;
}
long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
  return x * f;
}
long long n, m, b[200005], a[200005], c[200005], ans[200005], d[200005], cnt,
    fac[200005], inv[200005], dp[60][60], w[200005];
void insert(long long x) {
  for (long long i = (m); i >= (0); --i) {
    if (!(x & (1ll << i))) continue;
    if (d[i])
      x ^= d[i];
    else
      return d[i] = x, ++cnt, void();
  }
}
long long C(long long n, long long m) {
  if (n < m) return 0;
  return fac[n] * inv[m] % 998244353 * inv[n - m] % 998244353;
}
void dfs(long long x, long long S) {
  if (x > m) return ++ans[__builtin_popcountll(S)], void();
  dfs(x + 1, S);
  if (d[x]) dfs(x + 1, S ^ d[x]);
}
void dfs1(long long x, long long S) {
  if (x < 0) return ++w[__builtin_popcountll(S)], void();
  dfs1(x - 1, S);
  if (b[x]) dfs1(x - 1, S ^ b[x]);
}
signed main() {
  n = read(), m = read(), inv[0] = fac[0] = 1;
  for (long long i = (1); i <= (m); ++i)
    fac[i] = fac[i - 1] * i % 998244353, inv[i] = qpow(fac[i], 998244353 - 2);
  for (long long i = (1); i <= (n); ++i) a[i] = read(), insert(a[i]);
  if (cnt <= 26)
    dfs(0, 0);
  else {
    for (long long i = (m); i >= (0); --i)
      for (long long j = (m); j >= (0); --j)
        if ((d[j] & (1ll << i)) && (i != j)) d[j] ^= d[i];
    for (long long i = (m - 1); i >= (0); --i) {
      if (d[i]) continue;
      b[i] = (1ll << i);
      for (long long j = (0); j <= (m); ++j)
        if (d[j] & (1ll << i)) b[i] |= (1ll << j);
    }
    for (long long i = (0); i <= (m); ++i)
      for (long long j = (0); j <= (m); ++j)
        for (long long k = (0); k <= (m); ++k) {
          if (k & 1)
            dp[i][j] =
                (dp[i][j] - C(j, k) * C(m - j, i - k) % 998244353 + 998244353) %
                998244353;
          else
            dp[i][j] =
                (dp[i][j] + C(j, k) * C(m - j, i - k) % 998244353) % 998244353;
        }
    dfs1(m, 0);
    for (long long i = (0); i <= (m); ++i)
      for (long long j = (0); j <= (m); ++j)
        ans[j] = (ans[j] + 1ll * dp[j][i] * w[i] % 998244353) % 998244353;
    for (long long i = (0); i <= (m); ++i)
      ans[i] = qpow(2, cnt) * ans[i] % 998244353 *
               qpow(qpow(2, m), 998244353 - 2) % 998244353;
  }
  for (long long i = (0); i <= (m); ++i)
    printf("%lld ", ans[i] * qpow(2, n - cnt) % 998244353);
  return 0;
}
