#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7, maxn=1023+10;
int n, d ,t;
int dp[maxn][15][maxn];//i j k 从前i堆里选j堆除去后 异或值为k的方法数
int a[maxn];
int main()
{
scanf("%d", &t);
while (t--) {
memset(dp, 0, sizeof(dp));
scanf("%d %d", &n, &d);
int temp = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
temp ^= a[i];
}
for (int i = 0; i <= n; i++)
dp[i][0][0] = 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= d; j++)
for (int k = 0; k <= 1023; k++)//最大是1000 转成二进制将0变成1就是1023
dp[i][j][k] = (dp[i - 1][j][k] + dp[i-1][j-1][k^a[i]]) % MOD;
int ans = 0;
for (int j = 1; j <= d; j++)
ans = (ans + dp[n][j][temp]) % MOD;
if (!temp)//当temp=0的情况,不删除堆也是一种方案数,ans++
ans++;
printf("%d\n", ans);
}
return 0;
}