#P1732. Phone numbers

Phone numbers

在当今世界,你经常会遇到很多电话号码,而且它们变得越来越长。你需要记住这样一类号码。一种简单的记忆方法是按照如下图片所示,将字母分配给数字:

1 ij 2 abc 3 def

4 gh 5 kl 6 mn

7 prs 8 tuv 9 wxy

0 oqz

通过这种方式,每个单词或一组单词都可以被赋予一个唯一的数字,所以你可以记住单词而不是电话号码。很明显,如果能够在单词和人本身之间找到某种简单的联系,这会有它独特的魅力。所以你可以知道,你那位下棋的朋友的电话号码 941837296941837296 可以被解读为 WHITEPAWN“WHITEPAWN”(白兵),而你最喜欢的老师的电话号码 28553042855304 可以被解读为 BULLDOG“BULLDOG”(斗牛犬)。

编写一个程序,找到与给定数字以及给定单词列表相对应的最短单词序列(即单词数量尽可能少的序列)。这种对应关系由上面的图片描述。

输入

输入的第一行包含你必须找到其转写的电话号码。这个号码最多由100100位数字组成。第二行包含字典中单词的总数(最多为5000050000个)。其余的每一行包含一个单词,这个单词最多由5050个英文字母表中的小写字母组成。输入的总大小不超过300KB300KB

输出

输出的唯一一行包含你的程序找到的最短单词序列。单词之间用单个空格分隔。如果对于输入数据没有解决方案,这一行包含文本 “NoNo solution.solution.”(无解)。如果有多个具有最少单词数量的解决方案,你可以选择其中任何一个。

输入数据 1

7325189087
5
it
your
reality
real
our

输出数据 1

reality our

来源

CEOI 1999