编程题:拓扑排序
$$Mirko$$有一个包含$$N$$个不同单词的数组,他想使用替换密码对其进行加密。
我们首先选择一个密钥-英语字母表的排列,对使用替代密码的文本进行加密。然后我们将所有出现的字母$$a$$替换为键的第一个字母,所有出现的字母$$b$$替换为键的第二个字母,以此类推,直到字母$$z$$。
此外,$$Mirko$$有一个数组$$A$$,由$$1$$到$$N$$的数字按一定的顺序组成(换句话说,数组$$A$$是$$1$$到$$N$$的数字排列)。$$Mirko$$ 想选择一个键,使经过加密和字典排序的单词数组对应于数组$$a$$. 更准确地说,他希望最初位于$$A_{i}$$的单词经过加密和排序后位于位置i。让我们回忆一下,字典词序是单词在字典中出现的顺序。如果我们比较两个单词,从左到右,我们搜索两个单词中字母不同的第一个位置,并基于此,我们确定哪个单词在字典序上更小。如果单词$$X$$是单词$$Y$$的开头,那么单词$$X$$在字典序上比单词Y小。
$$Mirko$$目前没有心情加密,所以他好心地要求您为他做。
### 输入格式:
第一行输入整数$$N(2≤N≤100)$$。
下面$$N$$行中的每一行都包含一个单词,该单词最多由$$100$$个英文字母组成。这些词是相互不同的。最后一行包含$$N$$个整数——数组$$A$$的元素。
### 输出格式:
在解决方案不存在的情况下,输出“$$NE$$”。否则,在第一行输出“$$DA$$”,在第二行输出一个由$$26$$个不同的英文字母组成的单词——替换密码的密钥。如果存在多个解,则任意一个
### 得分:
在总分为$$30$$分的测试用例中,单词只包含英语字母表的前$$6$$个字母。
### 输入样例1:
in
2
ab
bc
2 1
### 输出样例1:
out
DA
bacdefghijklmnopqrstuvwxyz
### 输入样例2:
in
3
abc
bcd
add
1 2 3
### 输出样例2:
out
NE
### 输入样例3:
in
3
bbb
ccc
ddd
2 3 1
### 输出样例3:
out
DA
adbcefghijklmnopqrstuvwxyz
答案:若无答案欢迎评论
我们首先选择一个密钥-英语字母表的排列,对使用替代密码的文本进行加密。然后我们将所有出现的字母$$a$$替换为键的第一个字母,所有出现的字母$$b$$替换为键的第二个字母,以此类推,直到字母$$z$$。
此外,$$Mirko$$有一个数组$$A$$,由$$1$$到$$N$$的数字按一定的顺序组成(换句话说,数组$$A$$是$$1$$到$$N$$的数字排列)。$$Mirko$$ 想选择一个键,使经过加密和字典排序的单词数组对应于数组$$a$$. 更准确地说,他希望最初位于$$A_{i}$$的单词经过加密和排序后位于位置i。让我们回忆一下,字典词序是单词在字典中出现的顺序。如果我们比较两个单词,从左到右,我们搜索两个单词中字母不同的第一个位置,并基于此,我们确定哪个单词在字典序上更小。如果单词$$X$$是单词$$Y$$的开头,那么单词$$X$$在字典序上比单词Y小。
$$Mirko$$目前没有心情加密,所以他好心地要求您为他做。
### 输入格式:
第一行输入整数$$N(2≤N≤100)$$。
下面$$N$$行中的每一行都包含一个单词,该单词最多由$$100$$个英文字母组成。这些词是相互不同的。最后一行包含$$N$$个整数——数组$$A$$的元素。
### 输出格式:
在解决方案不存在的情况下,输出“$$NE$$”。否则,在第一行输出“$$DA$$”,在第二行输出一个由$$26$$个不同的英文字母组成的单词——替换密码的密钥。如果存在多个解,则任意一个
### 得分:
在总分为$$30$$分的测试用例中,单词只包含英语字母表的前$$6$$个字母。
### 输入样例1:
in
2
ab
bc
2 1
### 输出样例1:
out
DA
bacdefghijklmnopqrstuvwxyz
### 输入样例2:
in
3
abc
bcd
add
1 2 3
### 输出样例2:
out
NE
### 输入样例3:
in
3
bbb
ccc
ddd
2 3 1
### 输出样例3:
out
DA
adbcefghijklmnopqrstuvwxyz
答案:若无答案欢迎评论