小慕正在设计一套法术网络,许多法术节点通过单向能量通道相连,构成了一个复杂的系统。 每个法术节点有唯一编号,并且可能属于以下两类之一: * 普通节点 * 印记节点 某一时刻,恰好有一个法术节点成为唯一的故障源。故障会沿着能量通道不断扩散,所有能够被它沿有向路径到达的下游节点,都会收到异常信号。 为了防止系统崩溃,小慕制定了如下检查规则: 1. 故障源一定要进行检查。 2. 如果某个印记节点收到了异常信号,那么这个印记节点也必须进行检查。 3. 如果某个必须检查的法术节点本身是印记节点,那么它的所有上游法术节点也都必须进行检查。 4. 规则3会不断递归生效,直到不会再新增需要检查的法术节点为止。 现在给出整张能量网络、所有印记节点以及唯一的故障源,请你输出所有需要检查的法术节点编号,按升序输出。 如果存在一条从 `u` 到 `v` 的有向路径,则称: * `v` 是 `u` 的下游法术节点 * `u` 是 `v` 的上游法术节点 注意:这张图不保证无环。
提示:带虚线的词点一下有通俗解释。
输入描述
第一行输入两个整数 `n` 和 `k`,分别表示魔法塔总数与符印塔数量。 接下来 `n` 行,每行描述一座魔法塔的出边信息,格式为: `id c to1 to2 ... toc` 含义如下: * `id` 表示当前魔法塔编号 * `c` 表示它直接连接的下游魔法塔数量 * `to1 ... toc` 表示这些下游魔法塔的编号 接下来 `k` 行,每行一个整数,表示一座符印塔的编号。 最后一行输入一个整数 `origin`,表示唯一的诅咒源编号。 * `1 <= n <= 10000` * `0 <= k <= 1000` * `0 <= c <= 100` * `1 <= id <= 10000` 输入保证: * 所有魔法塔编号互不相同 * 所有出边指向的编号都出现在给定的 `n` 座魔法塔中
输出描述
输出一行,包含所有需要巡检的魔法塔编号,按升序排列,编号之间用空格分隔。
示例
示例 1
输入
7 2 12 2 25 31 25 1 44 31 0 44 2 57 63 57 1 71 63 1 71 71 0 44 71 57
输出
12 25 44 57 63 71
说明:* 诅咒源是 `57`,因此 `57` 一定需要巡检。 * 诅咒会传到下游的 `71`。 * `71` 是符印塔,并且收到了异常回响,因此 `71` 也需要巡检。 * 由于 `71` 是需要巡检的符印塔,所以它的所有上游魔法塔也都需要巡检,即 `63`、`44`、`25`、`12`、`57`。 * 最终需要巡检的魔法塔为 `12 25 44 57 63 71`。
示例 2
输入
5 1 101 1 205 205 1 330 330 2 410 520 410 0 520 1 330 330 330
输出
330
时间限制 1000 ms · 内存限制 128 MB