- 单词接龙
 - @ 2017-06-24 11:16:17
 
//可以重复用!!!! 
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int n,used[20],maxn=0;
string a[50];
string sum,first;
void search_DFS(string x)
{
     if(x.size()==1)
        sum=x;
    bool  ans=0;
    for( int i=0;i<n;i++)
    {
        if(used[i]<2)
        {
            int xtzm;
            for( int j=x.size()-1;j>=0;j--)
            {
                if(x[j]==a[i][0])
                {
                    xtzm=1;
                    ans=1;
                    while(x[j+xtzm]==a[i][xtzm])
                    xtzm++;
                }
                if(ans&&j+xtzm==x.size())
                break;
                if(ans&&j+xtzm!=x.size())
                ans=0;
            }
    if(ans)
          {
            int len=sum.size();
            sum+=a[i].substr(xtzm,a[i].size()-xtzm);
            used[i]++;
            search_DFS(a[i]);
            ans=0;
            used[i]--;
            sum.erase(len,a[i].size()-xtzm);
         }
        }
    }
    if(!ans&&sum.size()>maxn)
    maxn=sum.size();
    return ;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
cin>>first;
search_DFS(first);
cout<<maxn;
    return 0;
}