#include<bits/stdc++.h>
using namespace std;
int s_i(string s1)///字符串转化为整型
{
int i;
stringstream ss;
ss<<s1;
ss>>i;
return i;
}
string i_s(int i)///整型转化为字符串
{
string s1;
stringstream ss;
ss<<i;
ss>>s1;
return s1;
}
int a[21],e[21],vis[21];
int main()
{
string s1,s2,s3;
int n;
scanf("%d",&n);
int b,c,d[30];
memset(d,0,sizeof(d));
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
int m = a[i];
int y = 0;
while(m){///辗转相除法
y = y*10 + m%10;
m /= 10;
}
d[i] = y % 10;///将每个数字的最高位存入d数组中
}
sort(d,d+n,greater<int>());///将最高位排序
for(int i=0;i<n;i++){///按最高位将每个数排序
string s4 = i_s(a[i]);
int f = s4[0] - '0';
for(int j=0;j<n;j++)
if(d[j]==f&&vis[j]!=1){///vis数组表示该位置是否访问过
d[j] = a[i];
vis[j] = 1;///将访问过的标记为1
break;
}
}
for(int i=1;i<n;i++){
s1 = i_s(d[i-1]);
s2 = i_s(d[i]);
b = s_i(s1 + s2);
c = s_i(s2 + s1);
if(b<c) swap(d[i-1],d[i]);///a+b<b+a此时将两个数交换
}
s3 = "";///赋值空字符串
for(int i=0;i<n;i++)
s3 += i_s(d[i]);///将排好序的数字拼接在一起
cout<<s3;
return 0;
}