using namespace std;
#include <bits/stdc++.h>
#define ll long long
#define vl vector<ll>
#define vll vector<vl>
#define pll pair<ll,ll>
#define pb push_back
#define pob pop_back
#define pf push_front
#define pof pop_front
#define mp make_pair
#define ff first
#define ss second
#define ret return
#define mod 1000000007
#define LoL printf("Lol\n");
/*---------------------------------------------------------*/
#define ALL(a) a.begin(), a.end()
#define SIZ(x) (ll)x.size()
#define REP(i,a,n) for(ll i=a;i<n;++i)
#define REPA(i,a,n) for(ll i=a;i<=n;++i)
#define REPD(i,a,n) for(ll i=a;i>=n;--i)
#define IOS ios_base::sync_with_stdio(0);
#define MEMSET(v,h) memset((v),(h),sizeof(v))
/*---------------------------------------------------------*/
#define MMI(a,M)
#define ADD(a,b,M) (a%M+b%M)%M
#define SUB(a,b,M) (a%M-b%M+M)%M
#define MUL(a,b,M) (a%M*b%M)%M
#define DIV(a,b,M) (MMI(b,M)*a%M)%M
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
const int N=512;
int n,m,arr[N],dp[513][520];
// * dp[n][m] represent ways to get value 'm' when we consider first n elements
// * We can find ways for entire arr[Size(N)] by just adding the result of previous considered arr[Size(N-1)]
// * m will range from 0 to max possible value that can be formed by xoring any numbers from array
int main()
{
cin >> n >> m;
REP(i,0,n) cin >> arr[i];
REPA(i,0,arr[0]) dp[0][i] = 1;
REP(i,1,n)
{
REPA(j,0,arr[i])
{
REPA(k,0,513)
{
dp[i][k] += dp[i-1][j^k];
dp[i][k] %= mod;
}
}
}
REP(i,0,m+1) cout << dp[n-1][i] << " ";
}
/*
Sample input
5 10
1 6 12 4 8
Sample output
606 606 606 606 602 602 601 601 420 420 420
*/
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2luY2x1ZGUgICAgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgICAgIGxsICAgICAgbG9uZyBsb25nCiNkZWZpbmUgICAgIHZsICAgICAgdmVjdG9yPGxsPgojZGVmaW5lICAgICB2bGwgICAgIHZlY3Rvcjx2bD4KI2RlZmluZSAgICAgcGxsICAgICBwYWlyPGxsLGxsPgojZGVmaW5lICAgICBwYiAgICAgIHB1c2hfYmFjayAKI2RlZmluZSAgICAgcG9iICAgICBwb3BfYmFjayAKI2RlZmluZSAgICAgcGYgICAgICBwdXNoX2Zyb250IAojZGVmaW5lICAgICBwb2YgICAgIHBvcF9mcm9udCAKI2RlZmluZSAgICAgbXAgICAgICBtYWtlX3BhaXIKI2RlZmluZSAgICAgZmYgICAgICBmaXJzdAojZGVmaW5lICAgICBzcyAgICAgIHNlY29uZAojZGVmaW5lICAgICByZXQgICAgIHJldHVybgojZGVmaW5lICAgICBtb2QgICAgIDEwMDAwMDAwMDcKI2RlZmluZSAgICAgTG9MICAgICBwcmludGYoIkxvbFxuIik7Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KI2RlZmluZSAgICAgQUxMKGEpICAgICAgICAgICBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSAgICAgU0laKHgpICAgICAgICAgICAobGwpeC5zaXplKCkKI2RlZmluZSAgICAgUkVQKGksYSxuKSAgICAgICBmb3IobGwgaT1hO2k8bjsrK2kpCiNkZWZpbmUgICAgIFJFUEEoaSxhLG4pICAgICAgZm9yKGxsIGk9YTtpPD1uOysraSkKI2RlZmluZSAgICAgUkVQRChpLGEsbikgICAgICBmb3IobGwgaT1hO2k+PW47LS1pKQojZGVmaW5lICAgICBJT1MgICAgICAgICAgICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiNkZWZpbmUgICAgIE1FTVNFVCh2LGgpICAgICAgbWVtc2V0KCh2KSwoaCksc2l6ZW9mKHYpKSAKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwojZGVmaW5lICAgICBNTUkoYSxNKQojZGVmaW5lICAgICBBREQoYSxiLE0pICAgICAgKGElTStiJU0pJU0KI2RlZmluZSAgICAgU1VCKGEsYixNKSAgICAgIChhJU0tYiVNK00pJU0KI2RlZmluZSAgICAgTVVMKGEsYixNKSAgICAgIChhJU0qYiVNKSVNCiNkZWZpbmUgICAgIERJVihhLGIsTSkgICAgICAoTU1JKGIsTSkqYSVNKSVNCiAKLypfKl8qXypfKl8qXypfKl8qXypfKl8qXypfKl8qXypfKl8qXypfKl8qXypfKl8qXypfKl8qXypfKl8qLwogCmNvbnN0IGludCBOPTUxMjsKaW50IG4sbSxhcnJbTl0sZHBbNTEzXVs1MjBdOwkKCi8vICogZHBbbl1bbV0gcmVwcmVzZW50IHdheXMgdG8gZ2V0IHZhbHVlICdtJyB3aGVuIHdlIGNvbnNpZGVyIGZpcnN0IG4gZWxlbWVudHMKLy8gKiBXZSBjYW4gZmluZCB3YXlzIGZvciBlbnRpcmUgYXJyW1NpemUoTildIGJ5IGp1c3QgYWRkaW5nIHRoZSByZXN1bHQgb2YgcHJldmlvdXMgY29uc2lkZXJlZCBhcnJbU2l6ZShOLTEpXQovLyAqIG0gd2lsbCByYW5nZSBmcm9tIDAgdG8gbWF4IHBvc3NpYmxlIHZhbHVlIHRoYXQgY2FuIGJlIGZvcm1lZCBieSB4b3JpbmcgYW55IG51bWJlcnMgZnJvbSBhcnJheQoKaW50IG1haW4oKQp7CiAgICBjaW4gPj4gbiA+PiBtOwogICAKICAgIFJFUChpLDAsbikgY2luID4+IGFycltpXTsKICAgIFJFUEEoaSwwLGFyclswXSkgZHBbMF1baV0gPSAxOwogICAgUkVQKGksMSxuKQogICAgewogICAgICAgIFJFUEEoaiwwLGFycltpXSkKICAgICAgICB7CiAgICAgICAgICAgIFJFUEEoaywwLDUxMykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZHBbaV1ba10gKz0gZHBbaS0xXVtqXmtdOwogICAgICAgICAgICAgICAgZHBbaV1ba10gJT0gbW9kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBSRVAoaSwwLG0rMSkgY291dCA8PCBkcFtuLTFdW2ldIDw8ICIgIjsKfQoKLyoKU2FtcGxlIGlucHV0Cgo1IDEwCjEgNiAxMiA0IDgKClNhbXBsZSBvdXRwdXQKCjYwNiA2MDYgNjA2IDYwNiA2MDIgNjAyIDYwMSA2MDEgNDIwIDQyMCA0MjAKKi8=