/*
这道题求的是某个字符串str,至少删去多少个字符后,剩下的字符串是由dict中的单词可以组成的。
设f[i]=m,代表str[i...L-1]中至少删去m个字符后,剩下的字符串是由dict中的单词可以组成的。
则问题求的就是f[0]。
且可以得到递归式:
f[L]=0;dp[i]=dp[i+1]+1
如果存在单词可以匹配:f[i]=min(dp[i], dp[t+1]+(t-i+1)-m)
且str[t-1]为可以匹配的字符串的最后一个字符,匹配的单词的长度为m。
f[0]的最小值,即问题的最优化解。
*/
import java.util.*;
import java.math.*;
public class Main
{
static int MIN(int a,int b){return (a>b)? b:a;}
static int MAX(int a,int b){return (a<b)? b:a;}
static int Max_Int=200000000;
static int compare(char a[],char b[],int j,int L)
{
int i=0;
while(i<a.length && j<L)
{
if(a[i]==b[j])
{
i++;
j++;
}
else j++;
}
if(i==a.length)
return j-1;
return -1;
}
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int W,L;
String SS;
char str[]=new char [400];
char s[][]=new char [610][28];
int f[]=new int [610];
while(cin.hasNextInt())
{
W=cin.nextInt();
L=cin.nextInt();
SS=cin.nextLine();
SS=cin.nextLine();
str=SS.toCharArray();
for(int i=1;i<=W;i++)
{
SS=cin.nextLine();
s[i]=SS.toCharArray();
}
f[L]=0;
for(int i=L-1;i>=0;i--)
{
f[i]=f[i+1]+1;
for(int j=1;j<=W;j++)
{
if(s[j][0]==str[i])
{
int v=compare(s[j],str,i,L);
if(v!=-1)
{
f[i]=MIN(f[i], f[v+1]+v+1-i-s[j].length);
}
}
}
}
System.out.println(f[0]);
}
}
}