rt,调一天了,帮帮萌新/kk
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
const int maxn=1e6+10;
int t[maxn][26];
int sum[maxn];
int fl[maxn];
int wr[maxn];
int tot;
void insert(string s){
int u=0;
int n=s.length();
for(int i=0;i<n;i++){
int k=s[i]-'A';
if(!t[u][k]){
t[u][k]=++tot;
}
u=t[u][k];
}
wr[u]=1;
}
int f[105][6666];
void build(){
queue<int>q;
for(int i=0;i<26;i++){
if(t[0][i])q.push(t[0][i]);
}
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<26;i++){
if(t[u][i]){
fl[t[u][i]]=t[fl[u]][i];q.push(t[u][i]);
wr[t[u][i]]=wr[fl[t[u][i]]];
}
else t[u][i]=t[fl[u]][i];
}
}
}
const int mod=1e4+7;
int qpow(int a,int b){
int ans=1;
for(;b;b>>=1,a=a*a%mod) if(b&1) ans=ans*a%mod;
return ans;
}
int main(){
int n=read(),m=read();
for(int i=1;i<=n;i++){
string s;
cin>>s;
insert(s);
}
build();
f[0][0]=1;
for(int i=0;i<m;i++){
for(int j=0;j<=tot;j++){
for(int k=0;k<26;k++){
if(!wr[t[j][k]]) f[i+1][t[j][k]]=(f[i+1][t[j][k]]+f[i][j])%mod;
}
}
}
int ans=qpow(26,m);
for(int i=0;i<=tot;i++) ans=(ans-f[m][i]+mod)%mod;
cout<<ans<<endl;
}