#include<bits/stdc++.h> usingnamespace std; constint LEN = 20; int N, ans, vis[LEN], table[LEN][LEN]; string arr[LEN];
//a在前b在后,相同部分的长度 intf(string a, string b) { int idx = a.find_last_of(b[0]), len = 0; if (idx == -1) return-1; while (idx < a.length() && len < b.length() && a[idx] == b[len]) ++idx, ++len; if (idx == a.length() && len < a.length() && len < b.length()) return len; return-1; }
voidinit() { //i在前j在后 for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) table[i][j] = f(arr[i], arr[j]); }
voiddfs(int pre, int sum) { //更新ans不能放在循环的if里 //万一其他字母都不符合if呢?岂不是漏了开头第一个... ans = max(ans, sum); for (int i = 0; i < N; ++i) { if (vis[i] < 2 && table[pre][i] != -1) { int nxt_sum = sum + arr[i].length() - table[pre][i]; ++vis[i]; dfs(i, nxt_sum); --vis[i]; } } }
intmain() { cin >> N; for (int i = 0; i < N; ++i) cin >> arr[i]; init(); char chr; cin >> chr; for (int i = 0; i < N; ++i) { if (arr[i][0] == chr) { ++vis[i]; dfs(i, arr[i].length()); --vis[i]; } } cout << ans; return0; }