char *strStr(char *haystack, char *needle) { int m = strlen(needle); if (m == 0) return haystack; vector<int> next = makenext(needle, m); vector<int> res = match(haystack, strlen(haystack), needle, m, next); if (res.size()>0){ return haystack + res[0]; }else{ return NULL; } }
int main(){ while(scanf("%d%d",&n,&m),n||m){ pos=0;newnode(); for(int i=0;i<n;i++){ scanf("%s",s); insert(s,i); } for(int i=0;i<m;i++){ scanf("%s",s); insert(s,-1); } makenext(); ps=0; for(int i=0;i<pos;i++) if(i==0||flag[i]>0)pnt[ps++]=i; for(int i=0;i<ps;i++) bfs(i); printf("%d\n",dp()); } return 0; }