#include<queue>
#include<cstdio>
#include<cstring>
#define mod 10007
using namespace std;
int n,m,len,id,root,tot=1;
int f[61*101],trie[61*101][27];
char s[101];
bool mark[61*101];
int dp[101][61*101];
bool v[101][61*101];
queue<int>q;
struct ACautomata
{
void insert()
{
len=strlen(s);
root=1;
for(int i=0;i<len;i++)
{
id=s[i]-‘A‘;
if(!trie[root][id]) trie[root][id]=++tot;
root=trie[root][id];
}
mark[root]=true;
}
void getfail()
{
for(int i=0;i<26;i++) trie[0][i]=1;
q.push(1);
int now,j;
while(!q.empty())
{
now=q.front(); q.pop();
for(int i=0;i<26;i++)
{
if(!trie[now][i])
{
trie[now][i]=trie[f[now]][i];
continue;
}
q.push(trie[now][i]);
j=f[now];
f[trie[now][i]]=trie[j][i];
if(mark[trie[j][i]]) mark[trie[now][i]]=true;
}
}
}
int dfs(int l,int now)
{
if(!l) return 1;
if(v[l][now]) return dp[l][now];
v[l][now]=true;
for(int i=0;i<26;i++)
if(!mark[trie[now][i]]) dp[l][now]=(dp[l][now]+dfs(l-1,trie[now][i]))%mod;
return dp[l][now];
}
};
ACautomata AC;
int main()
{
scanf("%d%d",&n,&m);
while(n--)
{
scanf("%s",s);
AC.insert();
}
AC.getfail();
int a=AC.dfs(m,1);
int b=1;
for(int i=1;i<=m;i++) b=b*26%mod;
printf("%d",(b-a+mod)%mod);
}