#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char a[110][1100];
int min(int a,int b)
{
    if(a>b)    
       return b;
       return a ;
}
int cmp(int x,int y)
{
    char b[1000],c[1000];//本来我在这里想直接对字符串a操作的,但是呢a是全局变量,后面还要输出
    strcpy(b,a[x]);
    strcpy(c,a[y]);
    int i,n1,n2;
     char str[1000];
     n1=strlen(a[x]);
     n2=strlen(a[y]);
     //字符串拼接
     for(i=n1;i<=n1+n2;i++) 
         b[i]=c[i-n1];
    for(i=n2;i<n1+n2;i++)
        c[i]=b[i-n2];
        c[i]='\0';
    return strcmp(b,c);
 } 
 int main(void)
 {
     int n,i,j;
     char jiaohuan[1000];
     while(~scanf("%d",&n))
     {
         for(i=0;i<n;i++)
             scanf("%s",a[i]);
         for(i=0;i<n-1;i++)
         {
             for(j=i+1;j<n;j++)
             if(cmp(i,j)<0)
             {
                 strcpy(jiaohuan,a[i]);
                 strcpy(a[i],a[j]);
                 strcpy(a[j],jiaohuan);
             }
         }
         for(i=0;i<n;i++)
             printf("%s",a[i]);
         printf("\n");
     }
     return 0;
 }