#include #include using namespace std; #define ll long long #define ld long double #define pb push_back #define mp make_pair #define pii pair #define pll pair #define pdd pair #define all(x) (x).begin(), (x).end() #define fi first #define se second const int kMaxN = 105; const int b1 = 31; const int b2 = 37; const int mod1 = 100003; const int mod2 = 666013; int n; int sz[kMaxN]; int H1[kMaxN]; int H2[kMaxN]; bool dp[kMaxN]; char s[kMaxN][kMaxN]; map m; int main() { cin.sync_with_stdio(false); cin >> n; for (int i = 1; i <= n; i++) { cin >> (s[i] + 1); sz[i] = strlen(s[i] + 1); int h1 = 0; int h2 = 0; for (int j = 1; j <= sz[i]; j++) { h1 = (h1 * b1 + s[i][j] - 'a' + 1) % mod1; h2 = (h2 * b2 + s[i][j] - 'a' + 1) % mod2; } H1[i] = h1; H2[i] = h2; m[mp(h1, h2)] = 1; } int anssz = -1; int ans = 0; for (int w = 1; w <= n; w++) { m.erase(m.find(mp(H1[w], H2[w]))); for (int i = 1; i <= sz[w]; i++) { dp[i] = 0; } dp[0] = 1; for (int i = 1; i <= sz[w]; i++) { if (dp[i - 1]) { int h1 = 0; int h2 = 0; for (int j = i; j <= sz[w]; j++) { h1 = (h1 * b1 + s[w][j] - 'a' + 1) % mod1; h2 = (h2 * b2 + s[w][j] - 'a' + 1) % mod2; if (m.count(mp(h1, h2))) { dp[j] = 1; } } } } if (dp[sz[w]]) { if (sz[w] > anssz) { anssz = sz[w]; ans = w; } } m[mp(H1[w], H2[w])] = 1; } if (anssz != -1) { cout << (s[ans] + 1) << '\n'; } else { cout << -1 << '\n'; } return 0; }