文件目录

#include <bits/stdc++.h>
using namespace std;
int n;
string s[100], l;
bool vis[100];
char c;
int ans = 0;
string pd2(string s, string t)
{
    if (s.size() > t.size() && s.substr(s.size() - t.size()) == t ||
        s.size() < t.size() && t.substr(0, s.size()) == s || s == t)
        return "";
    for (int i = 1; i < s.size() - 1; i++)
        if (s.substr(s.size() - i) == t.substr(0, i))
            return s + t.substr(i);
    return "";
}
string pd(string s, string t)
{
    string ss = "", tt = "";
    for (int i = 1; i < s.size(); i++)
    {
        for (int j = 1; j < t.size(); j++)
        {
            if (s.substr(i) == t.substr(0, j))
            {
                tt = s + t.substr(j);
                if (tt.size() > ss.size())
                    ss = tt;
            }
        }
    }
    if (ss.size() > s.size() && ss.size() > t.size())
        return ss;
    return "";
}
void dfs(string str)
{
    if (ans < str.size())
    {
        ans = str.size();
        // cout<<str<<endl;
    }
    for (int i = 0; i < 2 * n; i++)
    {
        l = pd(str, s[i]);
        if (!vis[i] && l != "")
        {
            vis[i] = true;
            dfs(l);
            vis[i] = false;
        }
    }
}
int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> s[i];
        s[n + i] = s[i];
    }
    cin >> c;
    for (int i = 0; i < 2 * n; i++)
    {
        if (c == s[i][0])
        {
            vis[i] = true;
            dfs(s[i]);
            vis[i] = false;
        }
    }
    cout << ans;
    return 0;
}