/*#include <bits/stdc++.h> using namespace std; int n,no[21]; string s[21],mx,now,n1,n2; char c; void dfs(string s2){ for(int h=1;h<=s2.size();h++){ for(int i=1;i<=n;i++){ n1=""; n2=""; if(s[i]==s2)continue; for(int y=0;y<h;y++){ n1+=s[i][y]; n2+=s2[y]; } if(n1==n2){ if(no[i]==2)continue; no[i]++; now=s[i]-n1+s2; if(mx<now)mx=now; dfs(now); } } } } int main(){ cin>>n; for(int j=1;j<=n;j++){ cin>>s[j]; } cin>>c; for(int j=1;j<=n;j++){ if(s[j][0]==c){ dfs(s[j]); } } cout<<mx.size(); return 0; }*/ #include <iostream> #include <string> #include <vector> using namespace std; int n; int used[21]; string words[21]; string maxStr; // 计算拼接后的字符串 string merge(const string& a, const string& b) { for (int i = 1; i < min(a.size(), b.size()); ++i) { if (a.substr(a.size() - i) == b.substr(0, i)) { return a + b.substr(i); } } return ""; } void dfs(const string& current) { if (current.size() > maxStr.size()) { maxStr = current; } for (int i = 0; i < n; ++i) { if (used[i] >= 2) continue; string newStr = merge(current, words[i]); if (!newStr.empty()) { used[i]++; dfs(newStr); used[i]--; } } } int main() { cin >> n; for (int i = 0; i < n; ++i) { cin >> words[i]; } char start; cin >> start; for (int i = 0; i < n; ++i) { if (words[i][0] == start) { used[i]++; dfs(words[i]); used[i]--; } } cout << maxStr.size() << endl; return 0; } /************************************************************** Problem: 1864 User: zhouhongyi Language: C++ Result: Accepted Time:26 ms Memory:2080 kb ****************************************************************/