#include<bits/stdc++.h>
#define mod 10007
using namespace std;
int n,len,lens,sp[20009][26],dp[101][20009],fail[20009],u=0,v=1,use[20009],tot,now,ans,uuu=1;
bool ts[20009];
char a[20009];
int head[20009],last[20009];
struct node {
int val,next;
} f[20009];
void dfs(int x,bool flag) {
bool sflag=(flag|ts[now]);
ts[now]=sflag;
for(int i = head[x]; i != 0; i = f[i].next) dfs(i,sflag);
}
int main() {
scanf("%d%d",&n,&lens);
for(int i = 1; i <= n; i++) {
scanf("%s",&a);
len=strlen(a);
now=0;
for(int j = 0; j < len; j++) {
if(sp[now][a[j]-'A']==0) ++tot,sp[now][a[j]-'A']=tot;
now=sp[now][a[j]-'A'];
}
ts[now]=true;
}
while(u<v) {
++u;
for(int i = 0; i < 26; i++) {
if(sp[use[u]][i]==0) sp[use[u]][i]=sp[fail[use[u]]][i];
else fail[sp[use[u]][i]]=(use[u]==0?0:sp[fail[use[u]]][i]),++v,use[v]=sp[use[u]][i];
}
}
for(int i = 1; i <= tot; i++) {
if(head[fail[i]]==0) head[fail[i]]=i;
else f[last[fail[i]]].next=i;
last[fail[i]]=i;
}
dfs(0,false);
dp[0][0]=1;
for(int i = 1; i <= lens; i++)
for(int j = 0; j <= tot; j++)
for(int k = 0; k < 26; k++){
if(ts[sp[j][k]]==true) continue;
dp[i][sp[j][k]]=(dp[i][sp[j][k]]+dp[i-1][j])%mod;
}
for(int i = 0; i <= tot; i++) ans=(ans+dp[lens][i])%mod;
for(int i = 1; i <= lens; i++) uuu=uuu*26%mod;
printf("%d",(uuu-ans+mod)%mod) ;
return 0;
}