Mirko 有一个由 $N$ 个不同单词组成的数组,他想用替换密码对其进行加密。
我们通过首先选择一个密钥(英文字母表的一个排列)来使用替换密码加密文本。然后,我们将所有出现的字母 'a' 替换为密钥的第一个字母,将所有出现的字母 'b' 替换为密钥的第二个字母,依此类推,直到字母 'z'。
除了这些单词外,Mirko 还有一个由 $1$ 到 $N$ 的数字组成的数组 $A$(换句话说,数组 $A$ 是 $1$ 到 $N$ 的一个排列)。Mirko 希望选择一个密钥,使得这些单词在加密并按字典序排序后,与数组 $A$ 相对应。更具体地说,他希望最初位于 $A_i$ 位置的单词在加密和排序后位于位置 $i$。
让我们回顾一下,字典序是指单词在词典中出现的顺序。如果我们在比较两个单词,从左到右,我们寻找两个单词中第一个字母不同的位置,并以此为基础确定哪个单词的字典序较小。如果单词 $X$ 是单词 $Y$ 的前缀,则单词 $X$ 的字典序小于单词 $Y$。
Mirko 目前没有心情进行加密,所以他请你帮他完成这项工作。
输入格式
第一行包含一个整数 $N$ ($2 \le N \le 100$)。
接下来的 $N$ 行,每行包含一个单词,由最多 100 个英文小写字母组成。这些单词两两不同。
最后一行包含 $N$ 个整数——数组 $A$ 的元素。
输出格式
如果不存在解,输出 "NE"。
否则,在第一行输出 "DA",在第二行输出一个由 26 个不同英文小写字母组成的单词——即替换密码的密钥。
如果存在多个解,输出其中任意一个。
子任务
在价值 30 分的测试用例中,单词将仅由英文字母表的前 6 个字母组成。
样例
输入样例 1
2 ab bc 2 1
输出样例 1
DA bacdefghijklmnopqrstuvwxyz
输入样例 2
3 abc bcd add 1 2 3
输出样例 2
NE
输入样例 3
3 bbb ccc ddd 2 3 1
输出样例 3
DA adbcefghijklmnopqrstuvwxyz
说明
注:由于水平空间不足,原题面中的样例输出被拆分成了多行。实际输出中密钥应为单行。
样例 1 说明
加密后,单词分别变为 "ba" 和 "ac"。按照字典序排序后,数组变为 "ac", "ba",这意味着第一个单词最终排在第二个位置,第二个单词排在第一个位置。
样例 3 说明
加密后,单词分别变为 "ddd", "bbb", "ccc"。按照字典序排序后,数组变为 "bbb", "ccc", "ddd",这意味着第一个单词最终排在第三个位置,第三个单词排在第二个位置,第二个单词排在第一个位置。