#HK4224. 「ROI 2021 Day1」打孔卡片

「ROI 2021 Day1」打孔卡片

题目描述

译自 ROI 2021 Day1 T1. Перфокарты

在举办编程比赛的公司仓库里,发现了 nn 张打孔卡片。每张打孔卡片是一条由 mm 个格子组成的条带,每个格子要么包含一个小写英文字母,要么是一个孔洞。

比赛评委决定将所有打孔卡片按某种顺序排列,使得如果将它们从上到下叠放起来,就能形成比赛的口号——一个长度为 mm 的字符串 ss

换句话说,固定打孔卡片的顺序后,考虑任意位置 ii (1im1 \le i \le m)。那么字符串 ss 的第 ii 个字符必须与最上面一张在位置 ii 处包含字母的打孔卡片的第 ii 个字符相同。如果对于某个位置 ii,没有任何打孔卡片在该位置包含字母,则无法形成所需的字符串 ss

请帮助评委确定打孔卡片的排列顺序。

cards_sample2.eps

上图展示了第二个样例中的卡片顺序。标出了从上面能看到的字母。

输入格式

第一行包含两个整数 n,m (1n,m105)n, m\ (1 \le n, m \le 10^5),分别表示打孔卡片的数量和格子的数量。

第二行包含一个长度为 mm 的字符串 ss,由小写英文字母组成。

接下来的 nn 行中,每行描述一张打孔卡片。

每个描述以一个整数 kik_i (0kim0 \le k_i \le m) 开头,表示该打孔卡片中包含字母的格子数量。保证所有 kik_i 的总和不超过 21052\cdot 10^5

接下来是 kik_iai,ja_{i,j}ci,jc_{i,j}1ai,jm1 \le a_{i,j} \le mci,jc_{i,j} 是一个小写英文字母)的描述,表示在位置 ai,ja_{i,j} 处有字母 ci,jc_{i,j}。其他位置是孔洞。保证每张打孔卡片中字母位置按升序排列,即对于任意 1j<ki1 \le j < k_i,有 ai,j<ai,j+1a_{i,j} < a_{i,j+1}

输出格式

如果存在一种排列方式使得可以形成所需的字符串 ss,输出 nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n (1pin1 \le p_i \le n),其中 p1p_1 是最上面的打孔卡片的编号,p2p_2 是第二张打孔卡片的编号,依此类推,直到最下面的打孔卡片 pnp_n。如果有多种可能的答案,可以输出任意一种。

如果不存在这样的排列方式,输出 1-1

1 1
a
1 1 a
1
3 4
glhf
3 1 r 3 h 4 i
3 1 r 2 l 3 o
2 1 g 4 f
3 1 2
2 2
aa
2 1 a 2 b
2 1 b 2 a
-1

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 nn 的限制 mm 的限制 子任务依赖
11 1515 n8n \le 8 m100m \le 100 00
22 3535 n100n \le 100 0,10, 1
33 5050 n105n \le 10^5 m105m \le 10^5 0,1,20, 1, 2