#P1506. Substitution Cipher
Substitution Cipher
题目描述
马利迪尼西亚的古喜剧演员们想要排演一部新发现的阿里斯托芬喜剧。为了给观众一个惊喜,所有准备工作必须绝对保密。ACM的导演怀疑竞争对手正在窃取他的通信内容。为了防止其他公司泄露秘密,他决定在所有提及新剧的信件中使用替换密码。
替换密码由一个替换表定义,该表将替换字母表中的每个字符映射到同一字母表中的另一个字符。这种映射是双射的(每个字符恰好对应一个字符——不一定不同)。导演担心替换表被泄露,因此经常更换它。每次更换后,他会随机从字典中选取几个单词进行加密,并将它们与加密消息一起发送。明文(即未加密的)单词通过安全渠道发送,而非邮件。消息接收者可以通过比较明文和加密单词来创建新的替换表。
然而,ACM的一位密码专家发现这个系统有时并不安全。某些消息可能被竞争对手解密,即使他们不知道明文单词。原因是导演从字典中选择单词进行加密时,从未改变它们的顺序(字典中的单词按字典序排列)。字符串在字典序上小于的条件是:存在整数(,),使得对所有有,且。
导演想知道哪些消息可能被竞争对手读取。你需要编写一个程序来判断这一点。
输入格式
输入包含个测试用例。第一行仅包含正整数。随后是各测试用例:
- 第一行:两个正整数()和,分别表示替换字母表的大小(由前个小写字母组成)和加密单词的数量。
- 接下来行:每行一个加密单词。
- 最后一行:加密消息。
输出格式
对于每个测试用例,输出一行:
- 如果消息可以唯一解密,输出解密后的消息。
- 否则输出"Message cannot be decrypted."。
输入样例
2
5 6
cebdbac
cac
ecd
dca
aba
bac
cedab
4 4
cca
cad
aac
bca
bdac
输出样例
abcde
Message cannot be decrypted.
题目来源
年中欧地区竞赛