code:
#include<bits/stdc++.h>
using namespace std;
int n, ans = 0;
string w[25];
int v[25];
void dfs(string s,int cnt){
//答案取最大值
if(s.size() > ans) {
ans = s.size();
}
for(int i = 1; i <= n; i++) {
if(v[i] >= 2) continue;
//重叠部分
int ov = 0;
int mx = min(s.size(), w[i].size());
for(int k = 1; k <= mx; k++) {
if(s.substr(s.size()-k) == w[i].substr(0, k)) {
ov = k;
}
}
if(ov == 0) continue;
if(ov == s.size() || ov == w[i].size()) continue;
v[i]++;
string ns = s + w[i].substr(ov);
dfs(ns, cnt + 1);
v[i]--;
}
}
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> w[i];
}
char st;
cin >> st;
memset(v, 0, sizeof(v));
for(int i = 1; i <= n; i++) {
if(w[i][0] == st) {
v[i]++;
dfs(w[i], 1);
v[i]--;
}
}
cout << ans;
return 0;
}