//F 是 将要地政进行排序的文件名个数
//C 是列数
//L是最长的文件名字的长度
//文件名字是左对齐 长度范围是1-60
//最右边的一列将是最长的文件名长度
//其他的列的长度则是最长的文件名的长度加2
//每一行最长为60
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int n;
int main()
{
while(cin>>n)
{
string s[105];
int maxn=0;
for(int i=0;i<n;i++)
{
cin>>s[i];
if(s[i].length()>maxn)
{
maxn=s[i].length();
}
}
sort(s,s+n);
//计算需要有几列和几行
int col=(60-maxn)/(maxn+2)+1;//最大的列数
int row=(n-1)/col+1; //最少的行数
for(int i=0;i<60;i++)
{
cout<<"-";
}
cout<<endl;
int num=0;
int flag=0;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(j*row+i>=n){continue;}
if(num==n)
{
flag=1;
break;
}
if(j==col-1)
{
cout<<s[j*row+i];
for(int k=0;k<(maxn-s[j*row+i].length());k++)
{
cout<<" ";
}
}
else
{
cout<<s[j*row+i];
for(int k=0;k<(maxn-s[j*row+i].length()+2);k++)
{
cout<<" ";
}
}
num++;
}
cout<<endl;
if(flag==1)
{
break;
}
}
}
return 0;
}