//44
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

int d[10][10];
int n;
string ms;
int ml;
string s[10];

void dfs(int l,int sz,int u,vector<int> v){
  if(u==(1<<n)-1){
    string t;
    if(sz<=ml){
      t=s[v[0]];
      for(int i=1;i<v.size();i++){
	t+=s[v[i]].substr(s[v[i]].size()-d[v[i-1]][v[i]]);
      }
    }
    if(sz<ml||sz==ml&&t<ms){
      ml=sz;
      ms=t;
    }
  }else{
    v.push_back(0);
    for(int i=0;i<n;i++){
      if(!(u>>i&1)){
	v.back()=i;
	dfs(i,sz+d[l][i],u|1<<i,v);
      }
    }
  }
}

int main(){
  while(cin>>n,n){
    for(int i=0;i<n;i++){
      cin>>s[i];
    }
    int u=0;
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
	if(i!=j){
	  if(!(u>>i&1)&&s[i].find(s[j])!=string::npos){
	    u|=1<<j;
	  }else{
	    int k;
	    for(k=min(s[i].size(),s[j].size());;k--){
	      if(s[i].compare(s[i].size()-k,k,s[j],0,k)==0)break;
	    }
	    d[i][j]=s[j].size()-k;
	  }
	}
      }
    }
    ml=1<<30;
    for(int i=0;i<n;i++){
      dfs(i,s[i].size(),u|1<<i,vector<int>(1,i));
    }
    cout<<ms<<endl;
  }
  return 0;
}