#include<bits/stdc++.h>
using namespace std;
int n, vis[2500], ans, rem[25][25];
string str[25];
int findl(string a, string b) {
int a1 = a.size(), b1 = b.size();
for(int i=1;i<=min(a1, b1);i++) {
if(a.substr(a1 - i, i) == b.substr(0, i))
return i;
}
return 0;
}
void dfs(int x, int len) {
cout << x <<' '<< len << endl;
ans = max(ans, len);
for(int i=1;i<=n;i++) {
if(vis[i] == 2 or rem[x][i] == 0)
continue;
vis[i]++;
dfs(i, len + str[i].size() - rem[i][x]);
vis[i]--;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n;
for(int i=1;i<=n;i++)
cin >> str[i];
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {
int tmp = findl(str[i], str[j]);
rem[i][j] = tmp;
}
char ch;
cin >> ch;
for(int i=1;i<=n;i++) {
if(str[i][0] == ch) {
vis[i]++;
dfs(i, str[i].size());
vis[i]--;
}
}
cout << ans << endl;
return 0;
}
findl找最小重叠长度,不重叠返回0