萨姆尔·F·B·摩尔斯以他自己名字命名的摩斯电码而闻名于世界,摩斯电码现在仍然广泛被国际通讯使用。摩斯电码对应的字母是一一对应的。每一个字母都被转换为一个“滴”或“哒”声 (作为摩斯电码的基本元素——原注) 滴被表示为 “.” 而“哒”则被转换为 “-” 。每一个数据都被传输为一定长度的声音信号,一个“滴”是一次短按而一个“哒”则是三倍“滴”的时长。在两个相邻的元素 (数字或字母——译者注) 同时,长的间隔则表示两个单词之间的小节终止了。这些规则在同时导致了摩斯电码在发送和转译是不能总是保证完美无缺。这导致了有的信息未能被正确解码,但你需要帮助解决这个问题。
在本题中,你接收到一系列的摩斯电码,但是在单词和字母彼此之间没有任何空格分隔。由于省略空格,一串摩斯电码可能表示好几个意思。举个例子来说:若是接收到“滴滴滴”信号,在下方的表格展示中,它可以表示"EEE","IE","EI"或者"S"。为了鉴别这些输入的正确性,我们给予一个“词典”,解码后的词汇都需要在词典中出现过,但如果没有单词精确匹配,你的程序应当输出最理想的一个匹配结果。
在本题中,你的程序读入一系列的摩斯电码加密方式,一系列的“词典”以及一系列的需要解码的摩斯电码。这些摩斯电码,如同前文所说的一样,可能被混淆。对于每一个摩斯电码,你的程序应当输出一个匹配的“词典”中的词汇,如果有多个符合该电码或者没有任何一个符合,输出一个最贴近的词汇以及一个标识符"?"或者"!"。
如果一个电码完美地与“词典”中的词汇相符,他应该被单行,独自输出。如果有好几个“词典”词汇与电码相符,那么选择字母最少的一个翻译,如果这仍然使得出现了多种情况,则输出所有的这些可能性。否则,金输出最少的解码并且输出标识符"!"。
如果没有一个“词典”词汇与电码相符,你可以从尾部增加或者减少几个字符使其相符,同时输出改变字符数最少的一种可能性,并且输出标识符"?"。
输入保证一定只包含符合以上规则能得出结果的电码
首先36行,表示字符与摩斯电码一一对应的衍射关系,然后紧接着一个"*",表示表的结束,随后多行数据,表示“词典”,最多包含100个单词,然后一个"*",表示“词典”的结束,最后输入一段没有空格的摩斯电码,以一个"*"表示结束。没有摩斯电码会包含超过80个元素。
对于每一行可能匹配的摩斯电码,输出一个对应单词和标识符(若有)。每个单词应当单行输出。