背诵单词

Grade 0 Open Time Thursday, 21 February 2013, 11:02 pm
Discount 0.8 Time Discount Thursday, 28 February 2013, 11:02 pm
Allow late Yes Close Time Thursday, 28 February 2013, 11:02 pm
Input file letter.in Output file letter.out

【问题描述】
    小小在背单词,她发现当背诵了单词 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 ,均为小写字母组成。

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

【输入输出样例】
 
输入:
letter.in
5
beauty
beautiful
flower
man
dog

输出:
letter.out
beautiful
beauty
dog
flower
man