#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
char niz[111][11];
int n;

int mat[27][27];

vector<int> E[27];

set<int> S;

vector<int> sol;

int main(void){
    memset(mat,0x3f3f3f3f,sizeof mat);
    scanf("%d", &n);

    for (int i=0;i<n;++i){
        scanf("%s", niz[i]);
        for (int j=0;j<strlen(niz[i]);++j)
            S.insert(niz[i][j]-'a');
    }

    for (int i=0,j;i<n;++i){
        for (int j=i+1;j<n;++j){
            int minlen=min(strlen(niz[i]),strlen(niz[j]));
            for (int k=0;k<minlen;++k){
                if (niz[i][k]!=niz[j][k]){
                    E[niz[i][k]-'a'].push_back(niz[j][k]-'a');
                    if (mat[niz[i][k]-'a'][niz[j][k]-'a']!=0x3f3f3f3f && mat[niz[i][k]-'a'][niz[j][k]-'a']==1){
                        //printf("%c %c\n", niz[i][k],niz[j][k]);
                        return puts("!"), 0;
                    }
                    mat[niz[i][k]-'a'][niz[j][k]-'a']=0;
                    mat[niz[j][k]-'a'][niz[i][k]-'a']=1;
                    break;
                }
            }
        }
    }

    for (int k=0;k<26;++k)
        for (int i=0;i<26;++i)
            for (int j=0;j<26;++j)
                mat[i][j]=min(mat[i][j],mat[i][k]+mat[k][j]);
    //puts("proso");

    //for (int i=0;i<26;++i){
    //    if (S.find(i)==S.end())continue;
    //    for (int j=0;j<26;++j){
    //        if (S.find(i)==S.end() || S.find(j)==S.end())continue;
    //        printf(" %9d", mat[i][j]);
    //    }
    //    puts("");
    //}

    for (int i=0;i<26;++i)
        for (int j=0;j<26;++j){
            if (i==j)continue;
            if (S.find(i)==S.end() || S.find(j)==S.end())continue;
            if (mat[i][j]==0x3f3f3f3f)return puts("?"), 0;
            if (mat[i][j]==mat[j][i])return puts("!"), 0;
        }

    for (int cnt=0;cnt<26;++cnt){
        for (int i=0;i<26;++i){
            if (S.find(i)==S.end())continue;
            int k=0;
            for (int j=0;j<26;++j){
                if (mat[i][j]==0)++k;
            }
            if (k==cnt){sol.push_back(i);}
        }
    }

    for (vector<int>::reverse_iterator it=sol.rbegin();it!=sol.rend();++it)
        printf("%c", 'a'+(*it));
    puts("");
    return 0;
}
