#include<iostream>
#include<string.h>
using namespace std;
int cmp(char s1[], int L1, char s2[], int L2)
{
int result = 0;
if (L1 == L2)
{
result = strcmp(s1,s2);
return result;
}
else if (L1 > L2)
{
char* now = new char[L2 + 1];
char* p, * q;
p = s1; q = now;
while (*p != '\0')
{
for (int i = 0; i < L2 && *p != '\0'; i++)
{
*q = *p;
q++;
p++;
}
*q = '\0';
q = now;
if (strcmp(now,s2) != 0)
{
result = strcmp(now,s2);
return result;
}
}
delete[]now;
}
else if (L1 < L2)
{
char* now = new char[L1 + 1];
char* p, * q;
p = s2; q = now;
while (*p != '\0')
{
for (int i = 0; i < L1 && *p != '\0'; i++)
{
*q = *p;
q++;
p++;
}
*q = '\0';
q = now;
if (strcmp(s1,now) != 0)
{
result = strcmp(s1,now);
return result;
}
}
delete[]now;
}
return 0;
}
int main()
{
int n;
cin >> n;
int L[21];
char num[21][10];
for (int i = 0; i < n; i++)
{
cin >> num[i];
L[i] = strlen(num[i]);
}
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1; j++)
{
if (cmp(num[j], L[j], num[j + 1], L[j + 1]) == -1)
{
int t = L[j];
L[j] = L[j + 1];
L[j + 1] = t;
char s[10];
strcpy(s, num[j]);
strcpy(num[j], num[j + 1]);
strcpy(num[j + 1], s);
}
}
}
for (int i = 0; i < n; i++)
{
cout << num[i];
}
}