#include<iostream>
#include<algorithm>
using namespace std;
const int N = 30;
int n;
string q[N];
bool cmp(string a, string b)
{
if(a[0] != b[0]) return a > b; //如果数字首位不一样,直接取第一位较大的
else
{
for (int i = 0; i <= a.size()-1 && i<=b.size()-1 ; i++)
{
if (a[i] != b[i]) return a[i] > b[i]; //如果首位一样,逐位比较,同位数字更大的数字排在前面组合出的数字更大
if (i == a.size() - 1 || i == b.size() - 1) //如果查到了两数中一个数字的最后一位,比较较长的数字的后一位与首位数字的大小
{
if (a[i + 1]) return a[i + 1] > b[0];
else return b[i + 1] > a[0];
}
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> q[i];
sort(q, q + n, cmp);
for (int i = 0; i < n; i++)
cout << q[i];
}