#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define all(a)  (a).begin(),(a).end()
#define pb push_back
#define INF 99999999
#define eps 1e-9

int n;

string cat(string a,string t){
    for(int i=max(0,((int)a.size()-(int)t.size()));i<=a.size();i++){
        bool f=true;
        rep(j,a.size()-i){
            if(a[i+j]!=t[j])f=false;
        }
        if(f){
            string ret=a.substr(0,i)+t;
            return ret;
        }
    }
    return "error";
}

int toBin(vector<int> a){
    int ret=0;
    rep(i,a.size()){
        ret*=2;
        ret+=a[i];
    }
    return ret;
}

void del(string s[11]){
    rep(i,n-1){
        for(int j=i+1;j<n;j++){
            bool rev=false;
            string a,b;
            b=s[i],a=s[j];
            if(a.size()<b.size()){
                rev=true;
                swap(a,b);
            }
            rep(k,a.size()-b.size()+1){
                bool f=true;
                rep(l,b.size()){
                    if(a[k+l]!=b[l])f=false;
                }
                if(f){
                    if(rev)s[j]="";
                    else s[i]="";
                    break;
                }
            }
        }
    }
}

int main(){
    string s[11];
    while(cin>>n&&n){
        rep(i,n) cin>>s[i];
        
        del(s);
        
        string dp[1<<10][11];
        rep(i,1<<10)rep(j,11)dp[i][j]=string(200,'-');
        rep(i,10)dp[0][i]="";
        
        rep(i,n+1){
            vector<int> a;
            rep(j,i)a.pb(1);
            rep(j,n-i)a.pb(0);
            sort(all(a));
            
            do{
                int bin=toBin(a);
                rep(j,n){
                    if( ((1<<j)&bin)!=0 )continue;
                    rep(k,n){
                        string res=cat(dp[bin][k],s[j]);
                        if( dp[( bin^(1<<j) )][j].size()>res.size() ||  (dp[( bin^(1<<j) )][j].size()==res.size() && dp[( bin^(1<<j) )][j]>res)  ){
                            dp[( bin^(1<<j) )][j]=res;
                        }
                    }
                }
            }while(next_permutation(all(a)));
        }
        
        string ans=string(200,'-');
        rep(i,n){
            if(dp[(1<<n)-1][i].size()<ans.size() || (dp[(1<<n)-1][i].size()==ans.size()&&dp[(1<<n)-1][i]<ans))
                ans=dp[(1<<n)-1][i];
        }
        cout<<ans<<endl;
    }
}