#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;


bool match(string &s1,string &s2){
    if(s1.size()<s2.size())
        return false;
    int idx=0;
    for(int i = 0; i <= s1.size()-s2.size(); i++){
        if(s1[i]==s2[0]){
            bool f=true;
            for(int j = 0; j < s2.size(); j++){
                if(s1[i+j]!=s2[j]){
                    f=false;
                    break;
                }
            }
            if(f)
                return true;
        }
    }
    return false;
}


// iツ氾板姪堋づ個陳クツ点ツづーjツづ個湘ウツ妥板づ訪ツづェツつスツづつォツづ個催渉ャツ陳キツつウツづ個閉カツ篠堋療ア
string dp[11][1<<10];
vector<string> ss;
int matchSize[11][11];
string matchStr[11][11];
int n;

string rec(int idx,int s){
    if(s==(1<<n)-1)
        return"";
    if(dp[idx][s]!="")
        return dp[idx][s];
    string res;
    for(int i = 0; i < n; i++){
        if(i==idx)continue;
        if((s>>i)&1)continue;
        int ns=s|(1<<i);
        string ts=matchStr[idx][i]+rec(i,ns);
        if(res==""||ts.size()<res.size())
            res=ts;
        else if(ts.size()==res.size()&&ts<res)
            res=ts;
    }
    return dp[idx][s]=res;
}

int main(){
    while(cin>>n&&n!=0){
        for(int i = 0; i < 11; i++)
            for(int j = 0; j < (1<<10); j++)
                dp[i][j]="";
        ss.clear();
        vector<string> tmp;
        memset(matchSize,0,sizeof(matchSize));
        for(int i = 0; i < n; i++){
            string s;
            cin>>s;
            tmp.push_back(s);
        }
        bool ok[21];
        fill(ok,ok+21,true);
        for(int i = 0; i < n; i++){
            if(!ok[i])continue;
            for(int j = 0; j < n; j++){
                if(i==j)continue;
                if(match(tmp[i],tmp[j])){
                    ok[j]=false;
                }
            }
        }
        for(int i = 0; i < n; i++)
            if(ok[i])
                ss.push_back(tmp[i]);
        n=ss.size();
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                if(i==j)
                    continue;
                matchStr[i][j]=ss[j];
                for(int k = min(ss[i].size(),ss[j].size()); k >= 1; k--){
                    if(ss[i].substr(ss[i].size()-k,k)==ss[j].substr(0,k)){
                        matchSize[i][j]=k;
                        matchStr[i][j]=ss[j].substr(k);
                        break;
                    }
                }
            }
        }
        string res;
        for(int i = 0; i < n; i++){
            string s=ss[i]+rec(i,(1<<i));
            if(res==""||s.size()<res.size())
                res=s;
            else if(s.size()==res.size()&&s<res)
                res=s;
        }
        cout<<res<<endl;
    }
    return 0;
}