#include<bits/stdc++.h>
using namespace std;
const int N=70,M=110,MOD=1e4+7;
int n,m,len,now,son[N*M][30],tot=0,pos=0,ans=0;
char s[110];
int q[N*M],head=1,tail=0,bj[N],dp[N][N],fail[N];
int mpow(int x,int k){
int ans=1,now=x;
while(k){
if(k%2) ans*=now;
ans%=MOD;
k>>=1;
now=(now*now)%MOD;
}
return ans%MOD;
}
void input(){
scanf("%d%d",&n,&m);
// for(int i=0;i<26;i++) son[0][i]=++tot;
for(int i=1;i<=n;i++){
scanf("%s",s);
len=strlen(s);
now=0;
for(int j=0;j<len;j++){
if(son[now][s[j]-'A']==0)son[now][s[j]-'A']=++tot;
now=son[now][s[j]-'A'];
}
bj[now] = 1;
}
}
void pre(){
for(int i=0;i<26;i++) if(son[0][i])q[++tail]=son[0][i],fail[son[0][i]]=0;
while(head<=tail){
int x=q[head++];
for(int i=0;i<26;i++){
if(son[x][i]){
pos=fail[x];
while(son[pos][i]&&pos) pos=fail[pos];
fail[son[x][i]]=son[pos][i];
bj[son[x][i]]=bj[fail[son[x][i]]];
q[++tail]=son[x][i];
}else son[x][i]=son[fail[x]][i];
}
}
}
int main(){
input();
pre();
dp[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(!bj[j]){
dp[i+1][son[j][k]]=(dp[i+1][son[j][k]]+dp[i][j])%MOD;
}
}
}
}
ans=mpow(26,m);
for(int i=0;i<=tot;i++){
if(!bj[i]) ans=ans-dp[m][i]+MOD;
ans%=MOD;
}
printf("%d ",(ans+MOD)%MOD);
return 0;
}