#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1005;
const int F=1e14;
string s[N];
int nxt[N][N];
int len[N];
int n,m;
inline int read() {
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9') {
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9') {
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x*f;
}
struct nd {
int v[300][300];
} ans,a;
nd operator * (nd a,nd b) {
nd c;
for(int i=0; i<=n; i++)
for(int j=0; j<=n; j++)
c.v[i][j]=F;
for(int i=0; i<=n; i++) {
for(int j=0; j<=n; j++) {
for(int k=0; k<=n; k++) {
c.v[i][k]=min(c.v[i][k],a.v[i][j]+b.v[j][k]);
}
}
}
return c;
}
void pa1() {
for(int i=1; i<=n; ++i)
if(len[i]==1) {
cout<<m;
return;
}
}
void KMP() {
a.v[0][0]=F;
for(int i=1; i<=n; ++i)a.v[0][i]=len[i],a.v[i][0]=F;
for(int i=1; i<=n; ++i) {
int k=0;
for(int j=2; j<=len[i]; j++) {
while(k&&s[i][k+1]!=s[i][j])k=nxt[i][k];
if(s[i][k+1]==s[i][j])k++;
nxt[i][j]=k;
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
int l=0;
for(int k=2; k<=len[i]; k++) {
while(l&&s[j][l+1]!=s[i][k])l=nxt[j][l];
if(s[j][l+1]==s[i][k])l++;
if(k==len[i]) a.v[i][j]=len[j]-l;
}
}
}
}
void op() {
m--;
for(int i=0; i<=n; i++)
for(int j=0; j<=n; j++)
ans.v[i][j]=a.v[i][j];
while(m) {
if(m&1)ans=ans*a;
a=a*a;
m>>=1;
}
}
signed main() {
cin>>n>>m;
for(int i=1; i<=n; ++i) {
cin>>s[i];
len[i]=s[i].size();
s[i]=" "+s[i];
}
pa1();
KMP();
op();
int aans=1e9;
for(int i=1; i<=n; i++)aans=min(aans,ans.v[0][i]);
cout<<aans;
return 0;
}