编程题
### 问题描述 定义一个字符串的第 $i$ 个后缀为这个字符串从第 $i$ 个字符开始的后缀。例如字符串 `baca` 的第 $1$ 个后缀为 `baca`,第 $2$ 个后缀为 `aca`,第 $3$ 个后缀为 `ca`,第 $4$ 个后缀为 `a`。 定义一个字符串的后缀数组 $a$ 满足:将这个字符串的所有后缀按照字典序从小到大排序。由于一个字符串的所后缀长度均不同,所以任意两个后缀的字典序一定不同,即排序一定有唯一的结果。对于任意的 $1 \leq i \leq n$,如果排序后在第 $i$ 个位置上的后缀为第 $a_i$ 个后缀,则认为 $a$ 为这个字符串的后缀数组。 例如:将字符串 `baca` 的所有后缀按字典序从小到大排序,得到的结果为 `a`,`aca`,`baca`,`ca`。位于第 $1,2,3,4$ 个位置上的后缀分别为第 $4,2,1,3$ 个后缀,所以字符串 `baca` 的后缀数组为 $(4,2,1,3)$。 现在给定一个长为 $n$ 的数组 $a$,构造一个长为 $n$ 的只包含小写字母的字符串使这个字符串的后缀数组刚好为 $a$。如果有多个满足要求的字符串,输出字典序最小的字符串。如果不存在满足要求的字符串,输出 $-1$。 ### 输入格式 输入包含多组数据。 输入第一行包含一个正整数 $T$,表示测试组数。 对于每组测试,第一行包含一个整数 $n$,表示数组 $a$ 和你需要构造的字符串的长度。 第二行包含 $n$ 个整数 $a_1,a_2, \cdots ,a_n$,表示数组 $a$。 ### 输出格式 对于每组测试,如果存在满足要求的字符串,输出字典序最小的长为 $n$ 的只包含小写字母的字符串,使得这个字符串的后缀数组刚好为 $a$。如果不存在满足要求的字符串,输出 $-1$。 ### 样例输入 ```text 2 4 4 2 1 3 3 1 1 1 ``` ### 样例输出 ```text baca -1 ``` ### 说明 对于第一组测试,字符串 `baca` 的后缀数组为 $(4,2,1,3)$。可以证明不存在使字符串字典序更小的构造方式。 对于第二组测试,因为一个字符串每个后缀在排序后的结果中只出现一次,所以一个字符串的后缀数组中每个数至多出现一次。但这组测试中数组 $a$ 中存在 $3$ 个 $1$,所以可以得出数组 $a$ 不为任意一个字符串的后缀数组。 ### 评测数据规模 对于 $20$% 的评测数据,$1\leq n \leq 1000$。 对于 $100$% 的评测数据,$1\leq T \leq 10$,$1\leq n \leq 10^5$,$1 \leq a_i \leq n$。
查看答案
赣ICP备20007335号-2