/*
1. Code not to get placed. Code because it's FUN.
2. Keep in mind, 1.1 seconds is really "slow",0.99 seconds is really fast :P.
3. Always remember, Hard Work beats talent when talent doesnt work hard ^_^.
Name : Sarvagya Agarwal
Institution: BITS Pilani,Rajasthan.
Sophomore Year ^_^.
*/
#include <bits/stdc++.h>
using namespace std;
#define is(X) cout<<#X<<" is "<<X<<endl
const int MOD = 1e9+7;
int n,filters[100004],dp[10][1050];
int compute_ans(int i,int x)
{
if(i==n)
{
if(x==0)return 1;
return 0;
}
//apply the ith filter
int x_apply = filters[i]^x;
int ans1,ans2;
if(dp[i+1][x_apply]!=-1)ans1=dp[i+1][x_apply];
else ans1=dp[i+1][x_apply]=compute_ans(i+1,x_apply)%MOD;
if(dp[i+1][x]!=-1)ans2=dp[i+1][x];
else ans2=dp[i+1][x]=compute_ans(i+1,x)%MOD;
return dp[i][x]=(ans1+ans2)%MOD;
}
int main() {
//fast;
//freopen("input.txt","r",stdin);
int t;
scanf("%d",&t);//cin>>t;
while(t--)
{
char s[10];
scanf("%s",s);
//is(s);
for(int i=0;i<10;i++){s[i]=(s[i]=='w')?'1':'0';}
//is(s);
int photo = strtol(s,NULL,2);
//is(photo);
scanf("%d",&n);//cin>>n;
for(int i=0;i<10;++i)for(int j=0;j<=n;j++)dp[i][j]=-1;
for(int i=0;i<n;++i)
{
char x[10];
scanf("%s",x);
//is(x);
for(int i=0;i<10;++i){x[i]=(x[i]=='+')?'1':'0';}
//is(x);
filters[i]=strtol(x,NULL,2);
//is(filters[i]);
}
printf("%d\n",compute_ans(0,photo));//<<endl;
}
return 0;
}
LyoKMS4gQ29kZSBub3QgdG8gZ2V0IHBsYWNlZC4gQ29kZSBiZWNhdXNlIGl0J3MgRlVOLgoyLiBLZWVwIGluIG1pbmQsIDEuMSBzZWNvbmRzIGlzIHJlYWxseSAic2xvdyIsMC45OSBzZWNvbmRzIGlzIHJlYWxseSBmYXN0IDpQLgozLiBBbHdheXMgcmVtZW1iZXIsIEhhcmQgV29yayBiZWF0cyB0YWxlbnQgd2hlbiB0YWxlbnQgZG9lc250IHdvcmsgaGFyZCBeX14uCk5hbWUgOiBTYXJ2YWd5YSBBZ2Fyd2FsCkluc3RpdHV0aW9uOiBCSVRTIFBpbGFuaSxSYWphc3RoYW4uClNvcGhvbW9yZSBZZWFyIF5fXi4KIAoqLwogCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGlzKFgpIGNvdXQ8PCNYPDwiIGlzICI8PFg8PGVuZGwKY29uc3QgaW50IE1PRCA9IDFlOSs3OwppbnQgbixmaWx0ZXJzWzEwMDAwNF0sZHBbMTBdWzEwNTBdOwppbnQgY29tcHV0ZV9hbnMoaW50IGksaW50IHgpCnsKICAgIGlmKGk9PW4pCiAgICB7CiAgICAgICAgaWYoeD09MClyZXR1cm4gMTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIC8vYXBwbHkgdGhlIGl0aCBmaWx0ZXIKICAgIGludCB4X2FwcGx5ID0gZmlsdGVyc1tpXV54OwogICAgaW50IGFuczEsYW5zMjsKICAgIGlmKGRwW2krMV1beF9hcHBseV0hPS0xKWFuczE9ZHBbaSsxXVt4X2FwcGx5XTsKICAgIGVsc2UgYW5zMT1kcFtpKzFdW3hfYXBwbHldPWNvbXB1dGVfYW5zKGkrMSx4X2FwcGx5KSVNT0Q7CiAgICBpZihkcFtpKzFdW3hdIT0tMSlhbnMyPWRwW2krMV1beF07CiAgICBlbHNlIGFuczI9ZHBbaSsxXVt4XT1jb21wdXRlX2FucyhpKzEseCklTU9EOwogICAgcmV0dXJuIGRwW2ldW3hdPShhbnMxK2FuczIpJU1PRDsKfQppbnQgbWFpbigpIHsKCS8vZmFzdDsKCS8vZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pOwoJaW50IHQ7CglzY2FuZigiJWQiLCZ0KTsvL2Npbj4+dDsKCXdoaWxlKHQtLSkKCXsKCSAgICBjaGFyIHNbMTBdOwoJICAgIHNjYW5mKCIlcyIscyk7CgkgICAgLy9pcyhzKTsKCSAgICBmb3IoaW50IGk9MDtpPDEwO2krKyl7c1tpXT0oc1tpXT09J3cnKT8nMSc6JzAnO30KCSAgICAvL2lzKHMpOwoJICAgIGludCBwaG90byA9IHN0cnRvbChzLE5VTEwsMik7CgkgICAgLy9pcyhwaG90byk7CgkgICAgc2NhbmYoIiVkIiwmbik7Ly9jaW4+Pm47CgkgICAgZm9yKGludCBpPTA7aTwxMDsrK2kpZm9yKGludCBqPTA7ajw9bjtqKyspZHBbaV1bal09LTE7CgkgICAgZm9yKGludCBpPTA7aTxuOysraSkKCSAgICB7CgkgICAgICAgIGNoYXIgeFsxMF07CgkgICAgICAgIHNjYW5mKCIlcyIseCk7CgkgICAgICAgIC8vaXMoeCk7CgkgICAgICAgIGZvcihpbnQgaT0wO2k8MTA7KytpKXt4W2ldPSh4W2ldPT0nKycpPycxJzonMCc7fQoJICAgICAgICAvL2lzKHgpOwoJICAgICAgICBmaWx0ZXJzW2ldPXN0cnRvbCh4LE5VTEwsMik7CgkgICAgICAgIC8vaXMoZmlsdGVyc1tpXSk7CgkgICAgfQoJICAgIHByaW50ZigiJWRcbiIsY29tcHV0ZV9hbnMoMCxwaG90bykpOy8vPDxlbmRsOwoJfQoJcmV0dXJuIDA7Cn0=