#include<iostream>//变量名坚决不要重名!!! ,直接递归到1023即可,不必搞那么麻烦一个一个记录
#include<cstring>//A了,但为什么不明白。。????
#include<cstdlib>
#include<cmath>
#define large 1111
const __int64 maxn=1e9+7;//memset一定要有
using namespace std;
__int64 a[large];
__int64 d[large][large];
__int64 dp[large][large];
__int64 x[large][large];
__int64 n,t;
__int64 T;
__int64 result;
void solve1()
{
dp[1][a[1]]=1;
x[1][a[1]]=1;
for(int i=2;i<=n;i++)
{
dp[i][a[i]]+=1;
x[i][a[i]]+=1;
for(int j=0;j<1024;j++)
{
if(dp[i-1][j])
{
x[i][j^a[i]]+=dp[i-1][j];
dp[i][j]+=dp[i-1][j];
dp[i][a[i]^j]+=dp[i-1][j];
dp[i][j]%=maxn;
dp[i][a[i]^j]%=maxn;
x[i][j^a[i]]%=maxn;
}
}
}
}
void solve2()
{
d[n][a[n]]=1;
for(int i=n-1;i>=1;i--)
{
d[i][a[i]]+=1;
for(int j=0;j<1024;j++)
{
if(d[i+1][j])
{
d[i][a[i]&j]+=d[i+1][j];
d[i][j]+=d[i+1][j];
d[i][a[i]&j]%=maxn;
d[i][j]%=maxn;
}
}
}
}
void solve3()
{
solve1();
solve2();
result=0;
for(int i=1;i<=n-1;i++)
for(int j=0;j<1024;j++)
{
result+=x[i][j]*d[i+1][j];//result+=(x[i][j]%maxn)*(d[i+1][j]%maxn)%maxn错了为毛。。。。
result%=maxn;
}
}
int main()
{
while(~scanf("%I64d",&T))
{
for(int k=1;k<=T;k++)
{
memset(dp,0,sizeof(dp));
memset(d,0,sizeof(d));
memset(x,0,sizeof(x));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
if(n==1||n==0)
{
printf("0\n");
continue;
}
solve3();
printf("%I64d\n",result);
}
}
return 0;
}
10-18