#include <iostream>
#include <cstdio>
#include <cstring>
#include<string>
#include<vector>
using namespace std;
int mt[30][30],n;
vector<char> v;
vector<int> m;
int makni(int a) {
    //cout<<"M"<<a<<endl;
    m.push_back(a);
}
int maknuto(int a){
     for (int i=0; i<m.size(); ++i){
        if(a==m[i]) return 1;
    }
    return 0;
}

void isp(){
    for (int i=0; i<30; ++i){
    for (int j=0; j<30; ++j)
    cout<<mt[i][j]<<" ";
    cout<<endl;
    }
}

int stavi(char a){
    for (int i=0; i<v.size(); ++i){
        if (v[i]==a) return 1;
    }
    v.push_back(a);
    return 0;
}

int imam(char a){
    for (int i=0; i<v.size(); ++i){
        if(a==v[i]) return 1;
    }
    return 0;
}

int cisti(int in){
    for (int i=0; i<30; ++i){
        mt[i][in]=0;
    }
  // isp();
}


string nadi(){
    string rj="";
    int f,kl=0,in=-1;
    for (int i=0; i<30; ++i){
        if (i==29) goto ch;
        if (!imam(i+'a')||maknuto(i)) continue;
        f=0;
        for (int j=0; j<30; ++j){
            if (!imam(j+'a')||maknuto(i)) continue;
            if ( mt[i][j]){ f=1; break;}
        }
        if (!f) {++kl;in=i;}
        if (kl>1){/*cout<<"EEE"<<i; */return "?";}
        //cout<<i<<" "<<kl<<" "<<in<<endl;
        ch : if (i==29&&kl>0){ cisti(in); rj+=('a'+in); kl=0; makni(in); if (m.size()==v.size()) return rj; i=-1; in=-1;}
        if (i==29) return "!";
    }
    return rj;
}

int main(){
    string p,a;
    cin>>n;
    for (int i=0; i<n; ++i){
        cin>>a;
        for (int j=0; j<a.size(); ++j) stavi(a[j]);
        if(!i) p=a;
        else {
            for (int i=0;i<min(p.size(),a.size());++i){
                if (p[i]!=a[i]) {mt[a[i]-'a'][p[i]-'a']=1; break;}
            }
        }
        p=a;
    }
    //isp();
    cout<<nadi()<<endl;
	return 0;
}


/*
5
ula
uka
klua
kula
al
*/
