假定你认识很多MM,现在你要记住她们的电话号码。一个简单的办法是用字母代替: 1 ij 2 abc 3 def
4 gh 5 kl 6 mn
7 prs 8 tuv 9 wxy
0 oqz
这样,你的某个MM的号码825368163可以记作VALENTINE,而另一个4368153773可以记成GENTILESSE。
可惜的是,一个数字有多个对应方法,为了使字符串更加便于记忆,你应该用尽可能少的词来表达这个电话号码。请写一个程序,根据提供的电话号码和词库,按照上面描述的字母和数字的对应规律,来得到一个最长的‘电话号码字符串’。
输入
PHONE.IN的第1行给出MM的电话号码,最多100位。
第2行起给出词库,每行一个,最多50000个单词。每个单词均是小写的且最多50个字母。
输入文件大小不超过300KB。
输出:
输出文件PHONE.OUT 仅包含1行,即你所求出的最少单词个数的‘电话号码字符串’。单词和单词间用空格隔开。如果输入的电话号码在词库中找不到可以匹配的字符串,输出‘No solution’。如果有多个最少单词数的解,输出任意一个即可。
样例:
7325189087
5
it
your
reality
real
our
reality our
(注:另一个可以匹配的解是‘real it your’但是单词数更多).
如果输入的号码是 ‘4294967296’(词库同上),那么应该输出‘No solution.’。
提示:你可以用动态规划解决这道问题。