#include<bits/stdc++.h>
using namespace std;
#define is(X) cout<<#X<<" is "<<X<<endl
#define ll long long
int n,M[12][100003];
const int MOD=1e9+7;
ll int power(ll int a,ll int b)
{
ll int ans=1;
while(b)
{
if(b&1)ans=(ans%MOD * a%MOD)%MOD;
a*=a;
b/=2;
}
return ans%MOD;
}
bool check(int i)
{
for(int j=0;j<=n-1;j++)
{
//we want all these columns to be 0
if(M[i][j]==1)return false;
}
//last column should be 1
if(M[i][n]==0)return false;
return true;
}
ll int answer()
{
//gaussian elimination
int last=-1;
int x = 10,m = n+1;
//is(x);is(m);
for(int i=0;i<x;++i)
{
for(int j=0;j<m-1;++j)
{
if(M[i][j])
{
last = j;
for(int k=0;k<x;++k)
{
if(k==i)continue;
if(M[k][j])
{
for(int t=0;t<m;++t)
{
M[k][t] ^= M[i][t];
}
}
}
break;
}
}
}
//check for inconsistent matrix
for(int i=0;i<10;++i)
{
if(check(i))return 0;
}
return power(2,(n-1-last));
}
int main()
{
//freopen("input.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
char image[13];
scanf("%s",image);
scanf("%d",&n);
for(int i=0;i<10;++i){M[i][n]=(image[i]=='w')?1:0;}
for(int i=0;i<n;i++)
{
char temp[15];
scanf("%s",temp);
for(int j=0;j<10;++j)
M[j][i] = (temp[j]=='+')?1:0;
}
/*for(int i=0;i<10;++i)
{
for(int j=0;j<4;++j)
cout<<M[i][j]<<" ";
cout<<endl;
}*/
printf("%d\n",answer());
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpcyhYKSBjb3V0PDwjWDw8IiBpcyAiPDxYPDxlbmRsCiNkZWZpbmUgbGwgbG9uZyBsb25nIAppbnQgbixNWzEyXVsxMDAwMDNdOwpjb25zdCBpbnQgTU9EPTFlOSs3OwpsbCBpbnQgcG93ZXIobGwgaW50IGEsbGwgaW50IGIpCnsKICAgIGxsIGludCBhbnM9MTsKICAgIHdoaWxlKGIpCiAgICB7CiAgICAgICAgaWYoYiYxKWFucz0oYW5zJU1PRCAqIGElTU9EKSVNT0Q7CiAgICAgICAgYSo9YTsKICAgICAgICBiLz0yOwogICAgfQogICAgcmV0dXJuIGFucyVNT0Q7Cn0KYm9vbCBjaGVjayhpbnQgaSkKewogICAgZm9yKGludCBqPTA7ajw9bi0xO2orKykKICAgIHsKICAgICAgICAvL3dlIHdhbnQgYWxsIHRoZXNlIGNvbHVtbnMgdG8gYmUgMAogICAgICAgIGlmKE1baV1bal09PTEpcmV0dXJuIGZhbHNlOwogICAgfQogICAgLy9sYXN0IGNvbHVtbiBzaG91bGQgYmUgMQogICAgaWYoTVtpXVtuXT09MClyZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKfQpsbCBpbnQgYW5zd2VyKCkKewogICAgLy9nYXVzc2lhbiBlbGltaW5hdGlvbgogICAgaW50IGxhc3Q9LTE7CiAgICBpbnQgeCA9IDEwLG0gPSBuKzE7CiAgICAvL2lzKHgpO2lzKG0pOwogICAgZm9yKGludCBpPTA7aTx4OysraSkKICAgIHsKICAgICAgICBmb3IoaW50IGo9MDtqPG0tMTsrK2opCiAgICAgICAgewogICAgICAgICAgICBpZihNW2ldW2pdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsYXN0ID0gajsKICAgICAgICAgICAgICAgIGZvcihpbnQgaz0wO2s8eDsrK2spCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoaz09aSljb250aW51ZTsKICAgICAgICAgICAgICAgICAgICBpZihNW2tdW2pdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB0PTA7dDxtOysrdCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVtrXVt0XSBePSBNW2ldW3RdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAvL2NoZWNrIGZvciBpbmNvbnNpc3RlbnQgbWF0cml4CiAgICBmb3IoaW50IGk9MDtpPDEwOysraSkKICAgIHsKICAgICAgICBpZihjaGVjayhpKSlyZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwb3dlcigyLChuLTEtbGFzdCkpOwp9CmludCBtYWluKCkKewogICAvL2ZyZW9wZW4oImlucHV0LnR4dCIsInIiLHN0ZGluKTsKICAgaW50IHQ7CiAgIHNjYW5mKCIlZCIsJnQpOwogICB3aGlsZSh0LS0pCiAgIHsKICAgICAgIGNoYXIgaW1hZ2VbMTNdOwogICAgICAgc2NhbmYoIiVzIixpbWFnZSk7CiAgICAgICBzY2FuZigiJWQiLCZuKTsKICAgICAgIGZvcihpbnQgaT0wO2k8MTA7KytpKXtNW2ldW25dPShpbWFnZVtpXT09J3cnKT8xOjA7fQogICAgICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgICAgIHsKICAgICAgICAgICAgY2hhciB0ZW1wWzE1XTsKICAgICAgICAgICAgc2NhbmYoIiVzIix0ZW1wKTsKICAgICAgICAgICAgZm9yKGludCBqPTA7ajwxMDsrK2opCiAgICAgICAgICAgICAgICBNW2pdW2ldID0gKHRlbXBbal09PScrJyk/MTowOwogICAgICAgfQogICAgICAgLypmb3IoaW50IGk9MDtpPDEwOysraSkKICAgICAgIHsKICAgICAgICAgICBmb3IoaW50IGo9MDtqPDQ7KytqKQogICAgICAgICAgICBjb3V0PDxNW2ldW2pdPDwiICI7CiAgICAgICAgICAgY291dDw8ZW5kbDsKICAgICAgIH0qLwogICAgICAgcHJpbnRmKCIlZFxuIixhbnN3ZXIoKSk7CiAgIH0KfQo=
Mwp3d3d3d3d3d3d3CjMKKy0rLSstKy0rLQotLS0tLS0tLS0tCistLS0tLS0tLS0Kd2J3Yndid2J3YgozCistKy0rLSstKy0KKy0rLS0tLS0tLQotLS0tKy0rLSstCmJiYmJiYmJiYmIKMgotLS0tLS0tLS0tCi0tLS0tLS0tLS0=
3
wwwwwwwwww
3
+-+-+-+-+-
----------
+---------
wbwbwbwbwb
3
+-+-+-+-+-
+-+-------
----+-+-+-
bbbbbbbbbb
2
----------
----------