#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void*a,const void*b)
{
return strcmp((char *)a,(char *)b);
}
int main()
{
int N;
char lines[100][100];
while(scanf("%d",&N)!=EOF)
{
for(int i=0;i<N;i++)
{
scanf("%s",lines[i]);
}
qsort(lines,N,sizeof(lines[0]),cmp);
int maxLength=0;
for(int i=0;i<N;i++)
{
if(strlen(lines[i])>maxLength)
maxLength=strlen(lines[i]);
}
int columns=1;
while((maxLength*columns+2*(columns-1))<=60)
{
columns++;
}
columns--;
int rows=ceil((double)N/columns);
for(int i=0;i<60;i++)
printf("-");
printf("\n");
for(int i=0;i<rows;i++)
{
for(int j=0;j<columns;j++)
{
if(i+j*rows<N)
{
printf("%-s",lines[i+j*rows]);
for(int k=0;k<maxLength-strlen(lines[i+j*rows]);k++)
printf(" ");
if(j!=columns-1)
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=341