#include<bits/stdc++.h>
using namespace std;
const int N=20;
string str[N];
bool cmp(string a,string b)
{
if(a.size()==b.size()) return a>b;//若等长则直接利用string性质判断
else//若不等长
{
int cnt=0,len=min(a.size(),b.size());
for(int i=0;i<len;i++)
{
if(a[i]>b[i]) return true;
else if(a[i]<b[i]) return false;
if(a[i]==b[i]) cnt++;
}
if(cnt==len)//如果两者为字母串
{
if(a.size()>b.size())
{
string c=a.substr(0,b.size()),d=a.substr(b.size());
return cmp(c,d);//将多出来的部分再与前缀比较,如a==1234,b==123,多出的部分为4,与123比较
}
else
{
string c=b.substr(0,b.size()),d=b.substr(b.size());
return cmp(d,c);//***
}
}
}
}
void qsort(int l,int r)//快排思想
{
if(l>=r) return;
string x=str[l+r>>1];
int i=l-1,j=r+1;
while(i<j)
{
do i++;while(cmp(str[i],x));
do j--;while(cmp(x,str[j]));
// cout<<str[i]<<"***"<<str[j]<<"______"<<i<<" "<<j<<endl;这段忽略
if(i<j) swap(str[i],str[j]);
}
qsort(l,j),qsort(j+1,r);
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>str[i];
qsort(0,n-1);
for(int i=0;i<n;i++) cout<<str[i];
return 0;
}