#include <bits/stdc++.h>
using namespace std;
long long pow_mod(long long x, int k) {
  long long ans = 1;
  while (k) {
    if (k & 1) ans = ans * x % 998244353;
    x = x * x % 998244353;
    k >>= 1;
  }
  return ans;
}
long long C[60][60];
void pre(int n) {
  for (int i = 0; i <= n; i++) C[i][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
      C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % 998244353;
}
namespace LB {
long long num[60];
bool insert(long long x, int k) {
  for (int i = k - 1; i >= 0; i--)
    if ((x >> i) & 1) {
      if (!num[i]) {
        num[i] = x;
        return 1;
      } else
        x ^= num[i];
    }
  return 0;
}
void gause(int k) {
  for (int i = k - 1; i >= 0; i--)
    if (num[i]) {
      for (int j = i + 1; j < k; j++)
        if ((num[j] >> i) & 1) num[j] ^= num[i];
    }
}
}  // namespace LB
int ans[60];
long long a[60], b[60];
int up;
void dfs1(int d, long long s) {
  if (d > up) {
    ans[__builtin_popcountll(s)]++;
    return;
  }
  dfs1(d + 1, s);
  dfs1(d + 1, s ^ a[d]);
}
int cnt[60];
void dfs2(int d, long long s) {
  if (d > up) {
    cnt[__builtin_popcountll(s)]++;
    return;
  }
  dfs2(d + 1, s);
  dfs2(d + 1, s ^ b[d]);
}
bool vis[60];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  pre(m);
  for (int i = 1; i <= n; i++) {
    long long x;
    scanf("%lld", &x);
    LB::insert(x, m);
  }
  LB::gause(m);
  int sz = 0;
  for (int i = m - 1; i >= 0; i--)
    if (LB::num[i]) {
      a[++sz] = LB::num[i];
      vis[i] = 1;
    }
  if (sz * 2 <= m) {
    up = sz;
    dfs1(1, 0);
  } else {
    for (int i = 0; i < m; i++)
      if (!vis[i]) {
        b[++up] = (1LL << i);
        for (int j = i + 1; j < m; j++)
          if (LB::num[j] && (((LB::num[j]) >> i) & 1)) b[up] ^= (1LL << j);
      }
    dfs2(1, 0);
    for (int i = 0; i <= m; i++)
      for (int j = 0; j <= i; j++)
        for (int k = 0; k <= m - i; k++)
          ans[j + k] = (ans[j + k] + C[i][j] * C[m - i][k] % 998244353 *
                                         ((j & 1) ? 998244353 - 1 : 1) %
                                         998244353 * cnt[i]) %
                       998244353;
    long long inv = pow_mod(499122177, up);
    for (int i = 0; i <= m; i++) ans[i] = ans[i] * inv % 998244353;
  }
  long long v = pow_mod(2, n - sz);
  for (int i = 0; i <= m; i++) printf("%lld ", ans[i] * v % 998244353);
  printf("\n");
  return 0;
}
