#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char a[100][10],b[100][10];
bool d[100];
int len[100],n,k;
int mix(int i,int j){
if(i > j) return i;
else return j;
}
bool s(int i,int j,int step,int smix){
if(step == smix) return a[i][step] > a[j][step];
if(a[i][step] == a[j][step]) s(i,j,step + 1,smix);
else return a[i][step] > a[j][step];
}
void f(int step){
if(step == n){
for(int i = 0;i < n;i++) printf("%s ",b[i]);
printf("\n");
}
else{
for(int i = 0;i < n;i++){
if(!d[i]){
for(int j = 0;j < k;j++){
b[step][j] = a[i][j];
}
d[i] = true;
f(step + 1);
d[i] = false;
}
}
}
}
int main(){
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%s",a[i]);
len[i] = strlen(a[i]);
}
for(int i = 0;i < n - 1;i++){
bool flag = 1;
k = max(len[i],len[i - 1]);
for(int j = i + 1;j < n;j++){
if(s(i,j,0,mix(len[i],len[i - 1]) - 1)){
swap(len[i],len[j]);
swap(a[i],a[j]);
flag = 0;
}
}
if(flag) break;
}
f(0);
return 0;
}