/*一道和LCS类似的题目,dp[i]表示前i个字符要删除的最小个数*/
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
#define M 1000
using namespace std;
string s;
string t;
vector<string>din;
int dp[M];
void comp(int pos,int n)
{
int r=0;
int k;
for(int i=pos;i<s.size();i++)
{
if(s[i]==din[n][r])
{
r++;
}
if(r>=din[n].size()){k=i;break;}
}
if(r>=din[n].size())
{
int p=k-pos+1;
if(dp[pos]+k-pos+1-din[n].size()<dp[pos+p])
{
dp[pos+p]=dp[pos]+k-pos+1-din[n].size();
}
}
}
int main()
{
freopen("3267.txt","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<=m;i++)
{
dp[i]=1<<30;
}
dp[0]=0;
cin>>s;
for(int i=0;i<n;i++)
{
cin>>t;
din.push_back(t);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(din[j][0]==s[i])
{
if(i+din[j].size()<=m)
comp(i,j);
}
if(dp[i]+1<dp[i+1])
{
dp[i+1]=dp[i]+1;
}
}
}
printf("%d\n",dp[m]);
}