比赛场次 43
比赛名称 20090923练习赛
比赛状态 已结束比赛成绩
开始时间 2009-09-23 19:00:00
结束时间 2009-09-23 22:00:00
开放分组 全部用户
注释介绍
题目名称 背诵单词
输入输出 letter.in/out
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试点数 10 简单对比
用户 结果 时间 内存 得分
Gravatarybh AAAAAAAAAA 0.000 s 0.00 MiB 100
Gravatarmaxiem WAAAAAAAAA 0.000 s 0.00 MiB 90
GravatarReimBurSe. WWWWWWWWWA 0.000 s 0.00 MiB 10
Gravatar.Xmz WWWWWWWWWA 0.000 s 0.00 MiB 10
GravatarAchilles WWWWWWWWWA 0.000 s 0.00 MiB 10

背诵单词

☆   输入文件:letter.in   输出文件:letter.out   简单对比
时间限制:1 s   内存限制:128 MiB

【问题描述】

小小在背单词,她发现当背诵了单词 beauty 以后 ,再接着背诵单词 beautiful 就会觉得容易许多。由于有很多单词要背,她希望找到一种好的背诵顺序。单词 A 和它的前驱 B 的最大公共前缀的长度称为背诵单词 A 的便利值 ( 例如: B=beauty,A=beautiful , 则 A 的便利值是 len({A,B})=len(beaut)=5), 我们认为一个背诵单词 A 的花费是它的长度 ( 例如 : beautiful的长度 len(beautiful)=9) 与它的便利值之差(对于上述例子背诵 A 的花费为 9-5=4 )。请你求一个背诵顺序,使得背诵这些单词的花费总和最小。假设一开始你什么单词都不记得。

【输入格式】

给定一个单词表:第一行 N ( N < 100 )表示单词总数。接下来 N 行,每行一个单词。每个单词的长度不超过 20 ,均为小写字母组成。

【输出格式】

按照背诵顺序输出每个单词,每个单词占一行,不能有多余的字符。(若有多组,输出字典序最小的一组)

【输入样例】

5
beauty
beautiful
flower
man
dog

【输出样例】

beautiful
beauty
dog
flower
man