#include <bits/stdc++.h>
using namespace std;
long long mul(long long a, long long b) {
  if (!b) return 1;
  long long k = mul(a, b / 2);
  if (b & 1) return k * k % 998244353 * a % 998244353;
  return k * k % 998244353;
}
int n, m, k;
long long b[64], arr[64], C[64][64], w[64][64], ans[64];
long long val;
bool mark[64];
void add(long long x) {
  for (int i = m - 1; i >= 0; i--) {
    if (!x) break;
    if (!(x >> i & 1)) continue;
    if (!b[i]) {
      b[i] = x;
      arr[k++] = x;
    }
    x ^= b[i];
  }
}
void GaussJordan() {
  for (int i = m - 1; i >= 0; i--)
    if (b[i])
      for (int j = i - 1; j >= 0; j--)
        if (b[j] && (b[i] >> j & 1)) b[i] ^= b[j];
}
void dfs(int pos, long long sum) {
  if (pos >= k) {
    ans[__builtin_popcount(sum & (1ll << 32) - 1) +
        __builtin_popcount(sum >> 32)]++;
    return;
  }
  dfs(pos + 1, sum ^ arr[pos]);
  dfs(pos + 1, sum);
}
void doit() {
  dfs(0, 0);
  for (int i = 0; i <= m; i++) cout << (ans[i] * val) % 998244353 << ' ';
  cout << endl;
}
void calcB() {
  for (int i = 0; i < m; i++)
    if (!b[i]) {
      mark[i] = true;
      b[i] = (1ll << i);
    }
  for (int i = m - 1; i >= 0; i--)
    for (int j = i - 1; j >= 0; j--)
      if (b[i] >> j & 1) b[j] |= (1ll << i);
  k = 0;
  for (int i = 0; i < m; i++)
    if (mark[i]) {
      cerr << b[i] << endl;
      arr[k++] = b[i];
    }
}
void calcw() {
  for (int i = 0; i <= m; i++) C[i][0] = 1;
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= i; j++)
      C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % 998244353;
  for (int c = 0; c <= m; c++)
    for (int d = 0; d <= m; d++) {
      int dir = 1;
      for (int i = 0; i <= c; i++) {
        (w[c][d] += dir * C[d][i] * C[m - d][c - i] % 998244353 + 998244353) %=
            998244353;
        dir = -dir;
      }
    }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    long long x;
    cin >> x;
    add(x);
  }
  GaussJordan();
  val = mul(2, n - k);
  if (k <= 26) {
    doit();
    return 0;
  }
  calcB();
  dfs(0, 0);
  calcw();
  for (int c = 0; c <= m; c++) {
    long long p = 0;
    for (int d = 0; d <= m; d++)
      (p += w[c][d] * ans[d] % 998244353) %= 998244353;
    (p *= mul(mul(2, k), 998244353 - 2)) %= 998244353;
    cout << p * val % 998244353 << ' ';
  }
  cout << endl;
  return 0;
}
