#include using namespace std; #define MAXN 105 int N; string A[MAXN]; vector B; bool dp[MAXN]; bool match(int a, int b, int pos) { string &s = A[B[b]]; int len = s.size(); for (int i = 0; i < len; i++) { if (A[a][pos + i] != s[i]) { return false; } } return true; } bool can(int p) { int L = (int) A[p].size(); for (int i = 0; i <= L; i++) { dp[i] = false; } dp[0] = true; for (int i = 0; i < L; i++) { if (dp[i]) { for (int j = 0; j < N - 1; j++) { int crtLen = (int) A[B[j]].size(); if (i + crtLen <= L && match(p, j, i)) { dp[i + crtLen] = true; } } } } return dp[L]; } int main() { // assert(freopen("words.in", "r", stdin)); // assert(freopen("words.out", "w", stdout)); cin.sync_with_stdio(false); cin >> N; for (int i = 0; i < N; i++) { cin >> A[i]; } int ans = 0; int pans = -1; for (int i = 0; i < N; i++) { B.clear(); for (int j = 0; j < N; j++) { if (j != i) { B.push_back(j); } } if (can(i)) { int len = (int) A[i].size(); if (len > ans) { ans = len; pans = i; } } } if (pans == -1) { cout << -1 << endl; } else { cout << A[pans] << endl; } return 0; }