#include<bits/stdc++.h>
#define int long long
#define M 1000003
#define N 15
#define L 50
using namespace std;
int T,n,k,l,C[N+5][N+5];
char c[N+5][L+5],app;
inline int solve(int x)
{
int res=1;
for(int i=1;i<=l;i++)
{
app='!';
for(int j=1;j<=n;j++)
if((x>>(j-1))&1)
if(c[j][i]!='?')
{
if(app=='!') app=c[j][i];
else return 0;
}
if(app=='!') res=res*26%M;
}
return res;
}
signed main()
{
for(int i=0;i<=N;i++)
{
C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=(C[i-1][j]+C[i-1][j-1])%M;
}
cin>>T;
while(T--)
{
cin>>n>>k;
for(int i=1;i<=n;i++)
scanf("%s",c[i]+1);
l=strlen(c[1]+1);
int ans=0;
for(int i=0;i<(1<<n);i++)
{
int pc=0;
for(int j=0;j<n;j++)
if(i&(1<<j)) pc++;
if(pc>=k)
{
int sig=(pc-k)&1?-1:1;
ans=(ans+sig*C[pc][k]*solve(i))%M;
}
}
ans=(ans+M)%M;
printf("%lld\n",ans);
}
return 0;
}
写得和第三篇题解一模一样,但还是 wa 了……