#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define FOR(i,a,b) for(int i=a;i<=b;i++)#define MST(a,b) memset(a,b,sizeof(a))#define MAXL 20050#define MAXN 10050#define MOD 1000000007int img[10][3][3]{{{0,1,0},{1,0,1},{1,1,1}},{{0,0,0},{0,0,1},{0,0,1}},{{0,1,0},{0,1,1},{1,1,0}},{{0,1,0},{0,1,1},{0,1,1}},{{0,0,0},{1,1,1},{0,0,1}},{{0,1,0},{1,1,0},{0,1,1}},{{0,1,0},{1,1,0},{1,1,1}},{{0,1,0},{0,0,1},{0,0,1}},{{0,1,0},{1,1,1},{1,1,1}},{{0,1,0},{1,1,1},{0,1,1}}};char s[3][MAXL];long long f[MAXN][4];int n;int ntop[10]={3,3,1,3,3,2,2,3,3,3};void init(){ scanf("%d",&n); FOR(i,0,2)FOR(j,0,2*n)s[i][j]=0; char c=getchar(); while (c!='n')c=getchar(); FOR(i,0,2) { int j=0; c=getchar(); while(c!='n' && c!=-1) { s[i][j]=(c=='_'||c=='|'); j++; c=getchar(); } }}int G[1<<6][4][4];void pre(){ MST(G,0); FOR(st,0,((1<<6)-1)) { char s[3][3]; int t=st; FOR(i,0,2)FOR(j,0,1) { s[i][j]=t&1; t=t>>1; } if(s[0][0]==1)continue; char c1=0,c2=0; FOR(p,0,3) { if(p==0){c1=0;c2=0;} if(p==1){c1=1;c2=0;} if(p==2){c1=0;c2=1;} if(p==3){c1=1;c2=1;} char s0[3][3]; FOR(x,0,9) { MST(s0,0); s0[1][0]=c1; s0[2][0]=c2; FOR(j,0,2)FOR(k,0,1)s0[j][k]=s0[j][k]||img[x][j][k]; int fail=0; FOR(j,0,2) { FOR(k,0,1)if(s0[j][k]!=s[j][k]){fail=1;break;} if(fail)break; } if(fail)continue; int pt=ntop[x]; G[st][pt][p]++; } } }}void work(){ f[0][0]=1; f[0][1]=0; f[0][2]=0; f[0][3]=0; FOR(i,1,n) { int exp=1,st=0; FOR(j,0,2)FOR(k,0,1) { st+=s[j][k+(i-1)*2]*exp; exp=exp*2; } FOR(p,0,3)f[i][p]=(f[i-1][0]*G[st][p][0]+f[i-1][1]*G[st][p][1] +f[i-1][2]*G[st][p][2]+f[i-1][3]*G[st][p][3])%MOD; } int p; if(s[1][2*n]==0 && s[2][2*n]==0)p=0; if(s[1][2*n]==1 && s[2][2*n]==0)p=1; if(s[1][2*n]==0 && s[2][2*n]==1)p=2; if(s[1][2*n]==1 && s[2][2*n]==1)p=3; cout<<f[n][p]<<'n';}int main(){ pre(); int nn; scanf("%dn",&nn); FOR(ii,1,nn) { init(); work(); } return 0;}


