#include <bits/stdc++.h>
using namespace std;
int n , b[25] ;
long long a[25] , k ;
int check_maxn(long long chall, long long mast){
string c = to_string(a[chall]) , m = to_string(a[mast]) ;
int al = c.size() , bl = m.size() ;
if(al==bl) for(int z=0 ; z<al ; z++) {
if(c[z] > m[z])return 1 ;
else if(c[z] < m[z]) return 0 ;
}
else if(al > bl)
{
for(int z=0 ; z<bl ; z++) {
if(c[z] > m[z])return 1 ;
else if(c[z] < m[z])return 0 ;
}
for(int z=1 ; z<=n ; z++){
if(!b[z] and z!=chall and z!=mast){
string l = to_string(a[z]) ;
for(int w=bl ; w<al ; w++) {
if(l[z-bl] > c[z])return 0 ;
else if (l[z-bl] < c[z]) return 1 ;
}
}
}
return 1 ;
}
else if(al<bl) {
for(int z=0 ; z<al ; z++) {
if(c[z] > m[z])return 1 ;
else if(c[z] < m[z]) return 0 ;
}
for(int z=1 ; z<=n ; z++){
if(!b[z] and z!=chall and z!=mast){
string l = to_string(a[z]) ;
for(int w=al ; w<bl ; w++) {
if(l[z-bl] > m[z])return 1 ;
else if(l[z-bl] < m[z]) continue ;
}
}
}
return 0 ;
}
return 0 ;
}
int main()
{
cin >> n ;
for(int i=1 ; i<=n ; i++) cin >> a[i] ;
int nu = n ;
while(nu>0) {
for(int i=1 ; i<=n ; i++) {
if(b[i]==0){
k = i ;
break ;
}
}
for(int j=1 ; j<=n ; j++){
if(b[j] or j==k) continue ;
if(check_maxn(j,k)) k = j ;
}
nu-- ;
cout << a[k] ;
b[k] = 1 ;
}
return 0;
}