SP13621 HC12II - Security
题目描述
你正在设计一个新型的加密系统,其运作方式如下:
在服务器和客户端之间的通信中,你需要使用一个密钥 **k**。该密钥由 **m** 个部分组成,每个部分的长度为 **l**。密钥中的字符只能是 `{a, b, c, d, e, f}` 六个小写字母之一。服务器持有的密钥是 **k1**,客户端持有的密钥是 **k2**,定义如下:
- **k1 = f(k)**。函数 **f** 接收一个密钥,将其中的一些随机字母替换为 `?`,表示这些字符可以为字符集中的任意一个小写字母。
- **k2 = f(g(k))**。函数 **g** 接收密钥 **k**,并对其 **m** 个部分进行随机排列,输出结果再经过函数 **f** 的处理。
例如,如果 **m = 3**,**l = 2**:
- 使用函数 **f** 转换字符串 'abacbc',得到 '?ba??c'。
- 使用函数 **g** 转换字符串 'abacbc',每个部分都向左移动一位,得到 'acbcab'。
你的任务是给定 **k1** 和 **k2**,找出原始密钥 **k**。如果有多个可能的解,请输出字典序最小的那个;如果没有可能的解则输出 `IMPOSSIBLE`。
输入格式
输入包含多组测试数据。每组测试数据的第一行包含两个整数 **m** 和 **l**,分别代表密钥的部分数量和每个部分的长度。接下来的两行分别是字符串 **k1** 和 **k2**。
输出格式
对于每组测试数据,输出一行结果:如果能找到密钥 **k**,输出字典序最小的那个;否则,输出 `IMPOSSIBLE`。
说明/提示
- \(1 \le m \le 10\)
- \(1 \le l \le 10\)
- 字符串 **k1** 和 **k2** 的长度为 \(1 \le |k1|, |k2| \le 100\)
**本翻译由 AI 自动生成**