#include <bits/stdc++.h>
using namespace std;
const int N=1e4+7;
struct node{
int fail,son[27],end;
}trie[N];
int n,cnt=1,fa[N];
void insert(string s){
int u=1;
for(int i=0;i<s.size();i++){
int v=s[i]-'A';
if(!trie[u].son[v])trie[u].son[v]=++cnt;
u=trie[u].son[v];
// cout<<u<<endl;
}
trie[u].end=1;
}
queue<int> q;
void getfail(){
for(int i=0;i<=25;i++)trie[0].son[i]=1;
q.push(1);trie[1].fail=0;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<=25;i++){
if(!trie[u].son[i])trie[u].son[i]=trie[trie[u].fail].son[i];
else{
q.push(trie[u].son[i]);
trie[trie[u].son[i]].fail=trie[trie[u].fail].son[i];
//if(trie[trie[trie[u].fail].son[i]].end)trie[trie[u].son[i]].end=1;
//trie[trie[u].son[i]].end|=trie[trie[trie[u].son[i]].fail].end;
}
cout<<trie[u].son[i]<<endl;
}
}
}
int vis[N];
int dp[N][N];
int m;
int qpow(int a,int b){
int ans=1;
while(b){
if(b%2==1){
ans=ans*a%N;
}
a=a*a%N;
b>>=1;
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
string s;
cin>>s;
insert(s);
}
getfail();
dp[0][1]=1;
for(int i=1;i<=m;i++){
for(int d=1;d<=cnt;d++){
for(int j=0;j<=25;j++){
if(!trie[trie[d].son[j]].end){
dp[i][trie[d].son[j]]=(dp[i][trie[d].son[j]]+dp[i-1][j])%N;
// cout<<i<<" "<<trie[d].son[j]<<" "<<dp[i][trie[d].son[j]];
}
}
}
}
int ans=qpow(26,m);
int sum=0;
for (int i=1;i<=cnt;i++)(sum+=dp[m][i])%=N;
cout<<(ans-sum+N)%N;
return 0;
}