rt,爆搜+记忆化80,WA#4#5
#include<bits/stdc++.h>
using namespace std;
string w[20];
int n,flag[20],maxn;
map<string,bool> jiyihua;
void dfs(int now,int sum){
// cout<<"dfs("<<now<<","<<sum<<");";
string temp="";
for(int i=1;i<=n;i++)
temp+=flag[i]+'0';
// cout<<"temp="<<temp<<'\n';
if(jiyihua[temp])return;
jiyihua[temp]=1;
string sn=w[now];
bool f=0;
for(int i=1;i<=n;i++){
if(!flag[i]&&w[i][0]==sn[sn.size()-1]){
f=1;
flag[i]=1;
dfs(i,sum+w[i].size());
flag[i]=0;
}
}
if(!f)maxn=max(maxn,sum);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=n;i++){
flag[i]=1;
dfs(i,w[i].size());
flag[i]=0;
}
cout<<maxn;
return 0;
}