#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

int n, in[30], adj[30][30], d[30][30];
string s[105];
set<int> abc;
vector<int> abeceda;
bool ok[30], done[30], wtf;

int main(){
    memset(d, 63, sizeof d);

    scanf("%d", &n);
    for (int i=0; i<n; i++){
        cin >> s[i];
        for (int j=0; j<s[i].size(); j++)
            abc.insert(s[i][j]-'a');
    }
    for (set<int>::iterator it=abc.begin(); it!=abc.end(); it++)
        ok[*it]=true;

    for (int i=1; i<n; i++){
        int diff=0;
        while(s[i-1][diff]==s[i][diff] and diff<s[i-1].size() and diff<s[i].size())
            diff++;
        if (diff>=s[i-1].size() or diff>=s[i].size())
            continue;

        int prvi=s[i-1][diff]-'a', drugi=s[i][diff]-'a';
        adj[prvi][drugi]=d[prvi][drugi]=1;
        in[drugi]++;
    }

    for (int k=0; k<26; k++)
        if (ok[k])
            for (int i=0; i<26; i++)
                if (ok[i])
                    for (int j=0; j<26; j++)
                        if (ok[j])
                            d[i][j]=min(d[i][j], d[i][k]+d[k][j]);
    for (int i=0; i<26; i++)
        if (ok[i])
            for (int j=0; j<26; j++)
                if (j!=i and ok[j]){
                    if (d[i][j]<1337 and d[j][i]<1337){
                        printf("!\n");
                        return 0;
                    }
                    if (d[i][j]>1337 and d[j][i]>1337)
                        wtf=true;
                }
    if (wtf){
        printf("?\n");
        return 0;
    }

    for (;;){
        int next=-1;
        for (int i=0; i<26; i++)
            if (ok[i] and !done[i] and !in[i])
                next=i;
        if (!~next)
            break;

        abeceda.push_back(next);
        done[next]=true;
        for (int j=0; j<26; j++)
            if (ok[j] and adj[next][j])
                in[j]--;
    }

    for (int i=0; i<26; i++)
        if (ok[i] and !done[i]){
            printf("?\n");
            break;
        }
    for (int i=0; i<abeceda.size(); i++)
        printf("%c", abeceda[i]+'a');
    printf("\n");
	return 0;
}
