#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#define M 10000
using namespace std;
int cmp(const void *_a,const void *_b)
{
char a[100];
char b[100];
strcpy(a,(char *)_a);
strcat(a,(char *)_b);
strcpy(b,(char *)_b);
strcat(b,(char *)_a);
return -strcmp(a,b);
}
int main()
{
// freopen("in.in","r",stdin);
char str[60][30];
int n;
while(scanf("%d",&n) == 1 && n)
{
for(int i = 0;i < n;i++)
scanf("%s",str[i]);
qsort(str,n,sizeof(str[0]),cmp);
for(int i = 0;i < n;i++)
printf("%s",str[i]);
printf("\n");
}
return 0;
}
#include <cstring>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#define M 10000
using namespace std;
int cmp(const void *_a,const void *_b)
{
char a[100];
char b[100];
strcpy(a,(char *)_a);
strcat(a,(char *)_b);
strcpy(b,(char *)_b);
strcat(b,(char *)_a);
return -strcmp(a,b);
}
int main()
{
// freopen("in.in","r",stdin);
char str[60][30];
int n;
while(scanf("%d",&n) == 1 && n)
{
for(int i = 0;i < n;i++)
scanf("%s",str[i]);
qsort(str,n,sizeof(str[0]),cmp);
for(int i = 0;i < n;i++)
printf("%s",str[i]);
printf("\n");
}
return 0;
}