#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define REP(i,a) for (int i = 0; i < (a); i++)
#define FOR(i,a,b) for (int i = (a); i <= (b); i++)
#define ROF(i,a,b) for (int i = (a); i >= (b); i--)
#define SZ(x) (int)(x).size()
#define pb push_back

const int Nmax = 105;
const int Mod2 = 1000000009;
const int Mod1 = 1000000007;

bool dp[Nmax];
string word[Nmax];
int h1[Nmax][Nmax];
int h2[Nmax][Nmax];
int H1[Nmax];
int H2[Nmax];

int main()
{
    ios_base::sync_with_stdio(false);

    int n;
    cin >> n;
    FOR(i,0,n-1) {
        cin >> word[i];
        FOR(j,0,SZ(word[i])-1) {
            H1[i] = 1LL * H1[i] * 26 % Mod1 + word[i][j] - 'a';
            H2[i] = 1LL * H2[i] * 26 % Mod2 + word[i][j] - 'a';
            if (H1[i] >= Mod1) H1[i] -= Mod1;
            if (H2[i] >= Mod2) H2[i] -= Mod2;
        }
    }
    int best = -1;
    FOR(i,0,n-1) {
        REP(j,SZ(word[i])) dp[j] = 0;
        REP(from,SZ(word[i])) {
            h1[from][from] = word[i][from] - 'a';
            h2[from][from] = h1[from][from];
            FOR(to,from+1,SZ(word[i])-1) {
                h1[from][to] = 1LL * h1[from][to-1] * 26 % Mod1 + word[i][to] - 'a';
                h2[from][to] = 1LL * h2[from][to-1] * 26 % Mod2 + word[i][to] - 'a';
                if (h1[from][to] >= Mod1) h1[from][to] -= Mod1;
                if (h2[from][to] >= Mod2) h2[from][to] -= Mod2;
            }
        }
        REP(j,SZ(word[i])) {
            REP(k,n) if (k != i && SZ(word[k]) <= j + 1) {
                int len = SZ(word[k]);
                if (H1[k] == h1[j-len+1][j] && H2[k] == h2[j-len+1][j] && (j-len+1 == 0 || dp[j-len])) {
                    dp[j] = 1;
                    break;
                }
            }
        }
        if (dp[SZ(word[i])-1] && (best == -1 || SZ(word[i]) > SZ(word[best]))) best = i;
    }

    if (best == -1) cout << -1;
    else cout << word[best];
}