#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;
}