#include <bits/stdc++.h>
using namespace std;
const int N = 60;
const int mod = 998244353;
long long gi() {
  long long x = 0, o = 1;
  char ch = getchar();
  while (!isdigit(ch) && ch != '-') ch = getchar();
  if (ch == '-') o = -1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
int n, m, rk, ans[N], C[N][N], w[N][N], q[N];
long long a[N], b[N];
bool insert(long long v) {
  for (int i = m - 1; ~i; i--)
    if (v >> i & 1) {
      if (!a[i]) {
        a[i] = v;
        return 1;
      }
      v ^= a[i];
    }
  return 0;
}
void dfs(int x, long long v, long long *a, int *ans) {
  if (x == m) {
    ++ans[__builtin_popcountll(v)];
    return;
  }
  if (!a[x])
    dfs(x + 1, v, a, ans);
  else
    dfs(x + 1, v, a, ans), dfs(x + 1, v ^ a[x], a, ans);
}
void getb() {
  int now = m - 1;
  static int to[N];
  static long long new_a[N];
  for (int i = m - 1; ~i; i--)
    if (a[i]) to[i] = now--;
  for (int i = m - 1; ~i; i--)
    if (!a[i]) to[i] = now--;
  for (int i = 0; i < m; i++)
    for (int j = 0; j < m; j++) new_a[i] |= (a[i] >> j & 1) << (to[j]);
  swap(a, new_a);
  now = m - 1;
  for (int i = m - 1; ~i; i--)
    if (a[i]) to[i] = now--;
  for (int i = m - 1; ~i; i--)
    if (!a[i]) to[i] = now--;
  for (int i = 0; i < m; i++) new_a[to[i]] = a[i];
  swap(a, new_a);
  for (int i = m - rk - 1; ~i; i--) b[i] |= 1ll << i;
  for (int i = m - rk; i < m; i++)
    for (int j = 0; j < m - rk; j++) b[j] |= (a[i] >> j & 1) << i;
}
int main() {
  cin >> n >> m;
  int coef = 1;
  for (int i = 1; i <= n; i++) {
    if (!insert(gi()))
      coef = 2ll * coef % mod;
    else
      ++rk;
  }
  if (rk <= m / 2) {
    dfs(0, 0, a, ans);
  } else {
    for (int i = 0; i < N; i++) {
      C[i][0] = 1;
      for (int j = 1; j <= i; j++)
        C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
    }
    for (int t = 0; t <= m; t++)
      for (int c = 0; c <= m; c++)
        for (int k = 0; k <= t && k <= c; k++)
          w[t][c] = (w[t][c] + 1ll * ((k & 1) ? mod - 1 : 1) * C[t][k] % mod *
                                   C[m - t][c - k]) %
                    mod;
    for (int i = m - 1; ~i; i--)
      if (a[i])
        for (int j = i + 1; j < m; j++)
          if (a[j] >> i & 1) a[j] ^= a[i];
    getb();
    dfs(0, 0, b, q);
    int ibin = 1;
    for (int i = 1; i <= m - rk; i++)
      ibin = 1ll * ibin * ((mod + 1) >> 1) % mod;
    for (int c = 0; c <= m; c++) {
      for (int i = 0; i <= m; i++)
        ans[c] = (ans[c] + 1ll * q[i] * w[i][c]) % mod;
      ans[c] = 1ll * ans[c] * ibin % mod;
    }
  }
  for (int i = 0; i <= m; i++) cout << 1ll * ans[i] * coef % mod << ' ';
  return 0;
}
