在某算法补习班,学生们每天都要进行以下练习来备战竞赛:
- 选择一个长度为 $N$ 的由小写英文字母组成的字符串。例如,字符串可以是
aba。 - 找出该字符串从位置 $0, 1, \dots, N-1$ 开始的所有后缀,并将它们按字典序排序。在我们的例子中,后缀有
aba、ba和a,按字典序排序后的列表为a、aba、ba。 - 依次遍历排序后的列表,写下每个后缀在原字符串中的起始位置。在我们的例子中,字典序第一的后缀
a起始于aba的位置 2。后缀aba起始于位置 0;后缀ba起始于位置 1。因此,学生们会依次写下2 0 1。 - 使用原字符串,依次查看每一个字符或每两个相邻字符之间的位置。尝试将每个位置作为回文中心,找出以该位置为中心的最长回文串的长度,如果没有则记为 0。然后写下这些数字。在我们的例子中,学生们会先尝试第一个
a,然后是第一个a和第一个b之间的位置,接着是第一个b,然后是第一个b和第二个a之间的位置,最后是第二个a,因此他们会依次写下1 0 3 0 1。
你属于另一所竞争算法学校,某天深夜潜入该补习班。你发现了一张学生的课桌,上面有步骤 3 和步骤 4 得到的两个列表。你能推断出原字符串是什么,并将其写出来展示一下吗?如果有多种选择,请使用字典序最小的那一个。如果没有符合条件的字符串,说明学生一定算错了,你应该输出 Wrong calculation!。
输入格式
输入的第一行包含测试用例的数量 $T$,随后是一个空行。 接下来是 $T$ 个测试用例;每个测试用例包含三行,后跟一个空行。第一行包含字符串长度 $N$。第二行包含 $N$ 个整数:步骤 3 中描述的从 $0$ 到 $N-1$ 的整数排列。第三行包含 $2 \times N - 1$ 个整数,即步骤 4 中描述的数字。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是能够产生这两个列表的字典序最小的字符串。如果不存在这样的字符串,则输出 Wrong calculation!。
数据范围
- $1 \le T \le 100$
- $2 \le N \le 10^5$
- 第二个列表中的所有数字均在 $0$ 到 $N$ 之间(含边界)。
样例
输入 1
2 3 2 0 1 1 0 3 0 1 3 2 0 1 1 2 3 2 1
输出 1
Case #1: aba Case #2: Wrong calculation!
说明
样例 1 与题目描述中的例子一致。其他字符串(如 bcb)也符合这两个列表,但 aba 是唯一可接受的答案,因为它是字典序最小的。
在样例 2 中,回文数据暗示原字符串中的所有字符必须相同,但这与后缀数据不符。因此,学生一定算错了。