#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N=1e5+5;
const int mod1=1e9+7;
const int mod2=2146516019;
const int mod3=998244353;
ll n,m;
void solve(){
cin>>n;
vector<string> vs(3);
for(int i=0;i<3;i++) cin>>vs[i];
vector<set<int>> s(3);
int f=1;
for(int i=0;i<n;i++){
set<int> t;
for(int j=0;j<3;j++){
if(vs[j][i]=='?'){
a[i]++;
continue;
}
vs[j][i]-='0';
if(t.count(vs[j][i])) f=0;
t.insert(vs[j][i]);
}
s[i%3].merge(t);
}
vector<int> mb;
for(auto t:s){
if(t.size()>3) f=0;
int x=0;
for(int tt:t){
x^=(1<<tt);
}
mb.push_back(x);
}
if(f==0){
cout<<0<<'\n';
return;
}
ll ans=1;
for(int i=3;i<n;i++){
if(a[i]==2) ans=ans*2%mod1;
if(a[i]==3) ans=ans*6%mod1;
}
ll res=0;
vector<int> v(9);
iota(v.begin(),v.end(),1);
do{
int x=0,f=1;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(vs[i][j]=='?') continue;
x=i*3+j;
if(vs[i][j]!=v[x]) f=0;
}
}
x=(1<<v[0])+(1<<v[3])+(1<<v[6]);
if(x!=(x|mb[0])) f=0;
x=(1<<v[1])+(1<<v[4])+(1<<v[7]);
if(x!=(x|mb[1])) f=0;
x=(1<<v[2])+(1<<v[5])+(1<<v[8]);
if(x!=(x|mb[2])) f=0;
if(f==0) continue;
res=(res+ans)%mod1;
//cout<<res<<'\n';
}while(next_permutation(v.begin(),v.end()));
cout<<res%mod1<<'\n';
}
int main(){
IOS;
int T=1;
cin>>T;
while(T--){
solve();
}
return 0;
}