#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

const int MAXN = 100;

struct Word {
    int length;
    char s[1 + MAXN];
    int preffix[1 + MAXN];

    bool operator < (const Word &other) const {
        return length < other.length;
    }
};

Word v[1 + MAXN];
vector<int> g[1 + MAXN];
bool dp[1 + MAXN];

void BuildPreffix(int x) {
    int i = 0;
    for (int j = 2; j <= v[x].length; j++) {
        while (i && v[x].s[i + 1] != v[x].s[j])
            i = v[x].preffix[i];
        if (v[x].s[i + 1] == v[x].s[j])
            i++;
        v[x].preffix[j] = i;
    }
}

void KMP(int x, int y) {
    int i = 0;
    for (int j = 1; j <= v[y].length; j++) {
        while (i && v[x].s[i + 1] != v[y].s[j])
            i = v[x].preffix[i];
        if (v[x].s[i + 1] == v[y].s[j])
            i++;
        if (i == v[x].length) {
            g[j].push_back(j - v[x].length);
            i = v[x].preffix[i];
        }
    }
}

bool Try(int x) {
    for (int i = 1; i <= v[x].length; i++) {
        g[i].clear();
        dp[i] = false;
    }
    for (int j = 1; j < x; j++)
        KMP(j, x);
    dp[0] = true;
    for (int i = 1; i <= v[x].length; i++)
        for (int j = 0; j < g[i].size() && !dp[i]; j++)
            dp[i] |= dp[g[i][j]];
    return dp[v[x].length];
}

int main() {
    //freopen("b.in", "r", stdin);
    //freopen("b.out", "w", stdout);
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%s", v[i].s + 1);
        v[i].length = strlen(v[i].s + 1);
        BuildPreffix(i);
    }
    sort(v + 1, v + n + 1);
    for (int i = n; i >= 2; i--)
        if (Try(i)) {
            printf("%s\n", v[i].s + 1);
            return 0;
        }
    printf("-1\n");
    return 0;
}