#4超时,求优化
#include <bits/stdc++.h>
using namespace std;
int n,mmax=-1,vis[25];
string s[25];
char start;
int intersect(string a,string b)//返回两个字符串接龙时相交部分最小长度
{
string ans="";
int len=0;
for(int i=a.size()-1;i>=0&&a.size()-i<=b.size();i--)
{
int f=0;
for(int j=0,k=i;k<a.size();j++,k++)
{
if(a[k]!=b[j])
{
f=1;
break;
}
}
ans=a[i]+ans;
len++;
if(!f)return (len==a.size()||len==b.size()? 0:len);
}
if(ans==a||ans==b)return 0;
else return len;
}
void dfs(string a,int ind)
{
bool check=false;
vis[ind]++;
for(int i=0;i<n;i++)
{
if(vis[i]==2||intersect(a,s[i])==0)continue;
check=true;
string ns=a+s[i].substr(intersect(a,s[i]),114514);
dfs(ns,i);
vis[i]--;
}
if(!check)
{
int siz=a.size();
mmax=max(mmax,siz);
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)cin>>s[i];
cin>>start;
for(int i=0;i<n;i++)
{
if(s[i][0]!=start)continue;
memset(vis,0,sizeof(vis));
dfs(s[i],i);
}
printf("%d",mmax);
return 0;
}