这是一个交互式、运行两次的问题。
有一个哈希服务器,其目的是对长度为 10 的字符串进行哈希处理。然而,它有一个问题:它即将停止工作,因为它最多只能再处理 100 个字符串。你的任务是编写一个能够复制该服务器行为的程序。
字符串 $s$ 的哈希计算方式如下。令 $s_i$ 为第 $i$ 个字母在字母表中的序号(从 1 开始)。哈希值使用以下公式计算:
$$\sum_{i=1}^{10} (s_i \cdot x^{k_i}) \cdot (a_i + s_i) \pmod{26^{10}},$$
其中参数 $a_i, k_i$ ($1 \le i \le 10$) 以及 $x$ ($x > \max_{i=1}^{10}(\max(a_i, k_i))$) 是设置在哈希服务器上的 $1$ 到 $10^9$ 之间的不同质数。这些参数是未知的常量。
为了生成响应,哈希服务器将该数字转换为长度为 10 的字符串。它使用以 26 为基数的位值制书写,但每个数字都由一个字母表示:a 代表数字 0,b 代表数字 1,依此类推。如果结果数字太短,则会在前面补零,使其正好为 10 位长。
你的程序将运行两次。在第一次运行期间,你的程序最多可以向服务器发出 100 个唯一的请求。对于每个请求,哈希服务器都会返回给定字符串的哈希值。
在第二次运行期间,你的程序将以任意顺序接收来自第一次运行的服务器响应列表。然后,你的程序必须处理来自评测程序(jury's program)的 100 个哈希请求,并产生与原始服务器相同的响应。
交互
在开始时,参赛者的程序会接收一行,其中包含一个整数:1 或 2,表示当前正在执行哪一次运行。
如果是第一次运行,参赛者的程序应输出一个恰好包含 10 个小写英文字母的字符串。作为响应,评测程序将输出一个相同格式的字符串,表示所请求字符串的哈希值。所有请求必须不同。在最后一个请求之后,参赛者的程序应在单独的一行上输出字符串 “done”。
如果是第二次运行,评测程序将首先输出一个整数 $k$,表示来自第一次运行的响应数量,然后输出 $k$ 个响应的列表(顺序任意),每个响应占一行。此后,评测程序将通过输出与第一次运行中格式相同的字符串来向参赛者的程序发出哈希请求。对于每个请求,参赛者的程序应输出一个 10 字母的字符串,该字符串将被视为问题的答案:即给定请求的正确哈希值。评测程序正好发出 100 个请求。请求列表及其顺序对于每个特定的测试都是固定的,不会根据参赛者程序的输出进行调整。
样例
样例输入 1
1 wilyevxwyy gcfffvmuie nykaeyifai omhdftcmgu wqjmrukrfi
样例输出 1
aaaaaaaaaa bbbbbbbbbb ababababab bababababa aaaaabbbbb done
样例输入 2
2 5 nykaeyifai omhdftcmgu gcfffvmuie wilyevxwyy wqjmrukrfi aaaaaaaaaa bbbbbbbbbb cccccccccc dddddddddd eeeeeeeeee ffffffffff gggggggggg ...
样例输出 2
wilyevxwyy gcfffvmuie dhfvcyssbs nxntwfpqfo lzdblqdots xlzrxeinse wkdrewenay ...
说明
第二次运行的示例为了简洁仅包含 7 个请求。在测试系统中,评测程序将在第一个测试中发出 100 个请求。
以下是样例中使用的参数:
- $x = 73$。
- $a = (71, 67, 61, 59, 53, 47, 43, 41, 37, 31)$。
- $k = (29, 23, 19, 17, 13, 11, 7, 5, 3, 2)$。