#include<iostream>
#include<string>
using namespace std;
string words[21];//words[0]存取龙头,剩下的存取单词
int record[21];//存取每个单词的访问次数(每个单词最多只能用两次~~)
int n;
int sum=0;//存取最长的龙的长度
int conn_len(int i,int j){
int min_len=min(words[i].size(),words[j].size());
for(int k=1;k<=min_len;k++){
if(words[i].substr(words[i].size()-k,k)==words[j].substr(0,k))//在这里截取字符串,words[i]从最后一个开始截取,words[j]从第一个截取,每截取一次就判断一下是否相同,相同的话就返回剩下的长度
return words[j].size()-k;
}
return 0;
}
void dfs(int len,int p){
sum=max(sum,len);//每加上一个单词就更新一次最大长度
for(int i=1;i<=n;i++){
if(record[i]>1)continue;
int k=conn_len(p,i);
if(!k)continue;
record[i]++;
dfs(len+k,i);
record[i]--;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>words[i];
cin>>words[0];
dfs(1,0);
cout<<sum<<endl;
return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char word[25][100],fir[10];
int ans,n,check[25];
bool str_cmp(char *a,char *b){
int len=strlen(a);
for(int i=0;i<len;i++)
if(a[i]!=b[i]) return false;
return true;
}
void DFS(char *s,int wei){
ans=max(ans,wei);
int len=strlen(s);
for(int i=1;i<len;i++)
for(int j=1;j<=n;j++)
if(str_cmp(s+i,word[j]) && check[j]){
check[j]--;
DFS(word[j],wei-len+i+strlen(word[j]));
check[j]++;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%s",word[i]);
scanf("%s",fir+1); fir[0]=1;
for(int i=1;i<=n;i++)check[i]=2;
DFS(fir,1);
printf("%d\n",ans);
return 0;
}
var c:array[0..20,0..20] of longint; b,d:array[0..20] of longint; s:array[1..20] of string; ch:char; n,i,j,k,t,max:longint; function check(i,j:longint):longint; var k,l1,l2,l:longint; begin if d[i]<d[j] then l:=d[i] else l:=d[j]; for k:=1 to l-1 do if copy(s[i],d[i]-k+1,k)=copy(s[j],1,k) then exit(k); exit(0); end; procedure work(k,s:longint); var i,j:longint; begin if s>max then max:=s; for i:=1 to n do if (b[i]<2) and (c[k,i]>0) then begin inc(b[i]); work(i,s+d[i]-c[k,i]); dec(b[i]); end; end; begin assign(input,'dcjl.in'); reset(input); assign(output,'dcjl.out'); rewrite(output); readln(n); for i:=1 to n do begin readln(s[i]); d[i]:=length(s[i]); end; readln(ch); for i:=1 to n do for j:=1 to n do c[i,j]:=check(i,j); for i:=1 to n do if s[i][1]=ch then begin b[i]:=1; work(i,d[i]); b[i]:=0; end; writeln(max); close(input); close(output); end.