#arc044d. [arc044_d]suffix array

[arc044_d]suffix array

问题描述

高桥君喜欢构建后缀数组的算法。他每天都在实现和研究各种后缀数组的构建算法。然而,高桥君由于过度构建后缀数组而感到厌倦,所以决定对给定的排列求出按字典顺序最小的能够构成该排列的字符串。

给定两个字符串X1,X2,...,XsX_1,X_2,...,X_sY1,Y2,...,YtY_1,Y_2,...,Y_t,我们认为按字典顺序X<YX<Y成立,当且仅当满足以下条件之一:

  • 存在整数i(1imin(s,t))i(1≤i≤min(s,t)),使得对于满足1ji11≤j≤i-1的任意整数jj,都有Xj=YjX_j=Y_jXi<YiX_i<Y_i
  • 对于任意整数i(1imin(s,t))i(1≤i≤min(s,t)),都有Xi=YiX_i=Y_is<ts<t

另外,对于给定的字符串SS,它的后缀数组是指将字符串SS的每个位置到末尾的子串按照字典顺序排序,并将对应的位置依次排列起来的结果。例如,字符串ABACABA的后缀数组是[7,5,1,3,6,2,4]。

现在给定一个长度为NN的排列,请求出按字典顺序最小的,只由大写英文字母组成且能够构成该排列的字符串。如果不存在这样的字符串,则输出-1。


输入

输入从标准输入中以以下形式给出:

NN A1A2...ANA_1 A_2 ... A_N

  • 第一行包含一个整数N(1N106)N(1≤N≤10^6),表示排列的长度。
  • 第二行包含NN个整数A1,...,AN(1A1,...,ANN)A_1,...,A_N(1≤A_1,...,A_N≤N),表示给定的排列。保证这NN个数两两互不相同。

输出

请输出满足条件的按字典顺序最小的字符串。

在最后输出一个换行符。(修改于21:40)


输入样例1


7
7 5 1 3 6 2 4

输出样例1


ABACABA

满足条件的字符串还有其他多个,比如CXHZBWACXHZBWA,但字典序最小的是ABACABAABACABA


输入样例2


12
7 1 9 10 2 4 3 6 12 5 11 8

输出样例2


BDEDGFAHCCGG