给定一个长度为 $n$ 的文本 $s[1..n]$,我们通过提取其所有后缀并按字典序排序来创建其后缀数组:
$$s[1..n], s[2..n], \dots, s[n..n]$$
排序后,我们得到一个排好序的后缀列表:
$$s[p(1)..n], s[p(2)..n], \dots, s[p(n)..n]$$
并将序列 $p(1), p(2), \dots, p(n)$ 称为 $s[1..n]$ 的后缀数组。例如,如果 $s = \text{abbaabab}$,则所有后缀的排序列表为:
$$\text{aabab}, \text{ab}, \text{abab}, \text{abbaabab}, \text{b}, \text{baabab}, \text{bab}, \text{bbaabab}$$
其后缀数组为 $4, 7, 5, 1, 8, 3, 6, 2$。
众所周知,可以在线性时间内构建该数组。然而,你的任务完全不同:给定 $p(1), p(2), p(3), \dots, p(n)$,你需要检查是否存在至少一个由英文小写字母组成的文本,使得该序列是它的后缀数组。如果存在,输出任意一个这样的文本。否则,输出 $-1$。
输入格式
输入包含多个后缀数组的描述。
第一行包含描述的数量 $t$ ($t \le 100$)。
每个描述以一行开始,包含文本和数组的长度 $n$ ($1 \le n \le 500000$)。
下一行包含整数 $p(1), p(2), \dots, p(n)$。
你可以假设 $1 \le p(i) \le n$ 且没有重复的 $p(i)$ 值。
输入文件的总大小不会超过 50MB。
输出格式
对于每个测试用例,输出任意一个能够产生给定后缀数组的文本。如果不存在这样仅由英文小写字母组成的文本,则输出 $-1$。
样例
输入样例 1
5 2 1 2 2 2 1 3 2 3 1 6 3 4 5 1 2 6 14 3 10 2 12 14 5 13 4 1 8 6 11 7 9 7 5 1 7 4 3 2 6
输出样例 1
ab aa bab suffix reconstruction issofun