#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define maxn 105
bool vis[maxn];
int order[maxn];
int main()
{
char fir[maxn];
int n, t, tem;
char str[maxn][maxn];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
getchar();
int ans = 0, pnum = 0;
int pos,maxx,cnt,j,l;
memset(vis, 0, sizeof(vis));
for( int i = 0; i < n ; i++)
scanf("%s",str[i]);
int len = strlen(str[0]);
ans += len;
pos = 0;
vis[0] = 1;
order[pnum++] = 0;
for( cnt = 1; cnt < n; cnt++)
{
maxx = 0;
for( j = 0; j < n ; j++)
{
if(vis[j])
continue;
for( l = 0; str[pos][l] != '\0' && str[j][l] != '\0'; l ++)
{
if(str[j][l] != str[pos][l])
break;
}
if(maxx < l)
{
// cout<<str[j]<<" +->" <<str[pos]<<endl;
maxx = l;
tem= j;
}
}
if(maxx == 0)
for( int k = 0; k < n; k++)
if(!vis[k])
{
tem= k;
break;
}
pos = tem;
vis[pos]= 1;
order[pnum++] = pos;
// cout<<"pos"<<pos<<endl;
//cout<<strlen(str[pos]) - maxx<<endl;
ans += (strlen(str[pos]) - maxx);
}
printf("%d\n",ans);
for( int i = 0; i < pnum; i++)
printf("%s\n",str[order[i]]);
}
}
uva 10602
最新推荐文章于 2021-02-15 08:53:07 发布