n,visit[20],ans=0;
char word[601],a[20][31],fch;
max(a,b){return a>b?a:b;}
len(char*s){int l=0;while(*s)s++,l++;return l-1;}
judge(p){
int lw=len(word),lp=len(a[p]);
for(int i=lw;i>=max(0,lw-lp+1);i--)
if(word[i]==a[p][0]){
for(int j=1;j<=lw-i;j++)
if(word[i+j]!=a[p][j])
goto _;
return lw-i+1;
_:;
}
return 0;
}
add(char*s1,char*s2,int start){
int i,j;
for(i=len(s1)+1,j=start;j<=len(s2);i++,j++)
s1[i]=s2[j];
s1[i]=0;
}
del(char*s1,int sum){
while(sum--)
s1[len(s1)]=0;
}
dfs(p,l){
add(word,a[p],l);
visit[p]++;
int tmpl;
for(int i=0;i<=n-1;i++)
if(visit[i]<2&&(tmpl=judge(i)))
dfs(i,tmpl);
if(word[0]==fch)
ans=max(ans,len(word));
del(word,len(a[p])-l+1);
visit[p]--;
}
main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s",a[i]);
while(!isalpha(fch))
fch=getchar();
dfs(0,0);
printf("%d",ans+1);
}