luogu#P11089. [ROI 2021 Day 1] 手机游戏

[ROI 2021 Day 1] 手机游戏

题目背景

翻译自 ROI 2021 D1T2

题目描述

给定一个由 nn 个水晶组成的序列,从左到右排列。每个水晶属于 kk 种类型之一,用前 kk 个英文字母表示。因此,水晶序列可以用一串英文字母表示。

在游戏的一步中,可以从序列中移除一个水晶。玩家的目标是通过用允许的删除方式,得到字典序最小的字符串。

允许的删除方式由大小为 k×kk\times k 的表 AA 定义,表中的元素只包含 0011。如果 Ai,j=1A_{i,j} = 1,则表示当前面紧邻它的水晶是类型 ii 时,允许删除类型 jj 的水晶。这些操作可以按任意顺序执行。

字符串 xx 在字典序上小于字符串 yy,需要满足以下条件之一:

  • 存在一个位置 mm,在两个字符串中都存在,且在该位置之前,两个字符串的字符是相同的,但是 xx 的第 mm 个字符小于 yy 的第 mm 个字符,
  • 字符串 xx 是字符串 yy 的严格前缀(即从字符串 yy 末尾删除一个或多个字符得到)。

举个例子,ccf 的字典序小于 cff,因为 ccf 的第 22 位(c)小于 cff 的第 22 位(f);而 noi 的字典序小于 noip,因为 noinoip 的严格前缀。

输入格式

第一行给出两个整数 kknn1k26,1n5000001 \le k \le 26,1 \le n \le 500000),分别表示水晶的种类数量和初始水晶序列的长度。

接下来的 kk 行给出表 AA,第 ii 行包含 kk 个字符,都是 0011。第 ii 行第 jj 列的字符为 AijA_{ij}

最后一行是由 nn 个小写英文字母组成的字符串,表示初始水晶序列。保证字符串中只包含前 kk 个英文字母(如前七个英文字母分别是 abcdefg),第 ii 个字母代表第 ii 种类型的水晶。

输出格式

输出可以通过操作得到的字典顺序最小的字符串。

3 7
010
001
100
abacaba
aac
3 5
010
001
100
bcacb
bacb

提示

样例解释:

这两个样例的 AA 是相同的,它们都只允许这三种类型的删除(下划线的是它的前面一个字符,删除线的是被删除的字符):$\underline\text{a}\xcancel\text{b},\underline\text{b}\xcancel\text{c},\underline\text{c}\xcancel\text{a}$。

样例 11 中可以这样删除:

样例 22 中可以这样删除:

  • bcacb\text{bcacb}
  • \underline\text{b}\xcancel\text{c}\text{acb}
  • bacb\text{bacb}

数据范围:

子任务 分值 nn\le kk\le
11 1010 2020 2626
22 1212 5050 55
33 1616 300300
44 1717 500500 2626
55 1010 20002000
66 99 1000010000
77 88 100000100000
88 1111 500000500000 22
99 77 2626

对于 100%100\% 的数据,n500000n\le500000k26k\le26