#include<bits/stdc++.h>
using namespace std;
string s[4];
int n,t;
long long f[1000005][3][3],cnt[28][28][28][10][10],mod=1e9+9;
int cmp(int i,int j){
if(i==j)return 1;
if(i==26)return 0;
if(j==26)return 2;
return (i<j)?0:2;
}
int zip(char ch){
if(ch >='a' && ch<='z')return ch - 'a';
else if(ch=='?')return 27;
else return 26;
}
main(){
for(int i=0;i<=26;++i){
for(int j=0;j<=26;++j){
for(int k=0;k<=26;++k){
int a=cmp(i,j);
int b=cmp(j,k);
vector<int>st[3];
if(i<26)st[0]={i,27};
else st[0]={26};
if(j<26)st[1]={j,27};
else st[1]={26};
if(k<26)st[2]={k,27};
else st[2]={26};
for(auto A:st[0])for(auto B:st[1])for(auto C:st[2])cnt[A][B][C][a][b]++;
}
}
}
cin>>t;
while(t--){
cin>>s[0]>>s[1]>>s[2],s[0]=" "+s[0],s[1]=" "+s[1],s[2]=" "+s[2];
n=0;
int len[3];
for(int i=0;i<=2;++i)len[i]=s[i].size()-1,n=max(n,len[i]);
for(int i=len[0]+1;i<=n;++i)s[0][i]='a'-1;
for(int i=len[1]+1;i<=n;++i)s[1][i]='a'-1;
for(int i=len[2]+1;i<=n;++i)s[2][i]='a'-1;
for(int i=0;i<=n;++i)for(int j=0;j<2;++j)for(int k=0;k<2;++k)f[i][j][k]=0;
f[0][0][0]=1;
for(int i=0;i<n;++i){
int A=zip(s[0][i+1]);
int B=zip(s[1][i+1]);
int C=zip(s[2][i+1]);
for(int j=0;j<2;++j){
for(int k=0;k<2;++k){
for(int n_j=0;n_j<3;++n_j){
for(int n_k=0;n_k<3;++n_k){
int j_=j,k_=k;
if(!j_ && n_j==2||!k_ && n_k==2)continue;
if(n_j==0)j_=1;
if(n_k==0)k_=1;
f[i+1][j_][k_]=(f[i+1][j_][k_]+f[i][j][k] * cnt[A][B][C][n_j][n_k])% mod;
}
}
}
}
}
printf("%lld\n",f[n][1][1]);
}
}