#P000003. 删字母

删字母

删字母

1s|1024Mb

现有一个长度为nn ,字符集为前kk个小写字母的字符串。

给你一个k×kk \times k0101矩阵AA,如果Ai,j=1A_{i,j} =1 ,意味着出现了相邻 ii 字母和 jj 字母,且ii字母在前面,我们可以删除jj字母。你可以以任何次数任何顺序进行删除,当然也可以不删。

现在问你,进行若干删除操作之后,能得到最小字典序的字符串是什么。

字典序就是从首位开始,一位一位比较,如果哪一位更小或者哪一位为空就结束。

输入格式

第一行两个数kknn(1k26,1n500000)(1\leq k\leq 26 ,1\leq n \leq 500000)

接下来一个k×kk \times k 的01矩阵。

k+2k+2行一个长度为nn的字符串。

输出格式

能得到最小字典序的字符串。

样例输入 1

3 7 
010
001
100
abacaba

样例输出 1

aac

样例输入 2

3 5
010
001
100
bcacb

样例输出 2

bacb

下发数据文件 http://bzoj.org/file/2/erase.zip

样例解释

  • image-20210819162457942db32926b610c6eee.png

image-20210819162514993f798a9af85f20d9d.png

子任务

子任务序号 分数 n k 依赖
1 10 20\leq 20 26\leq 26
2 12 50\leq 50 5\leq 5
3 16 300\leq 300 2
4 17 500\leq 500 26\leq 26 1-3
5 10 2000\leq 2000 1-4
6 9 10000\leq 10000 1-5
7 8 100000\leq 100000 1-6
8 11 500000\leq 500000 2\leq 2
9 7 26\leq 26 1-8