#USACO1434. 字母游戏

字母游戏

字母游戏在家用电视机上广泛流行。

在该游戏的其中一个版本中,每个字母都有一个分值,如下图所示:

lgame.gif

你需要收集一些字母,并用这些字母拼成一个或多个单词。

拼单词时,一个字母收集了多少个,那么拼的时候就能用多少个,不能多用。

如果只拼出一个单词,那么这个单词的所有字母对应分值相加,就是你的得分。

如果拼出多个单词,那么这些单词的分值相加就是你的得分。

你需要尽可能的使自己的得分达到最高。

我们将提供一个单词列表,只有在列表中出现过的单词才是有效单词。

输入格式

第一行,包含一个小写字母构成的字符串(长度 3∼7),表示你收集到的字母。

接下来若干行,用来描述单词列表,每行包含一个单词,最后一行为一个 “.” 表示输入结束。

单词由小写字母构成,长度 3∼7。

单词列表中的单词,保证没有重复,并且按照字典序排列。

输出格式

第一行输出一个整数,表示最高得分。

接下来若干行,输出所有可以获得最高得分的单词拼法,每行一个。

由给定字母的个数,以及所有列表中单词的长度范围,可以很容易看出,给定字母只能拼出 1∼2 个列表中的单词。

所以,在输出时,应按照字典序排序,先按第一个单词排序,第一个单词相同时,按第二个单词排序。

当能够拼成两个单词时,这两个单词应按照字典序排序,组成单词对。

单词对中的两个单词可以相同。

prmgroa
profile
program
prom
rag
ram
rom
.
24
program
prom rag

提示

单词列表中单词的数量不超过 40000 个。