#P16550. [Bapc2024]Disgruntled Diner

[Bapc2024]Disgruntled Diner

题目背景

Diana 是 Batavian Authentic Prestigious Cuisine 餐厅的主厨。所有订单都会记录在中央计算机中;为了组织厨房工作,每一道被点的菜还会单独打印在一张小票上。

每张小票的一面写着菜品,用一个大写英文字母表示;另一面写着桌号,用一个数字表示。某张小票对应的菜品为 L、桌号为 d 时,记作小票 Ld。同一桌可能多次点同一道菜,因此完全相同的小票可以出现多次。

一道菜完成后,Diana 会把对应小票钉到公告板上。公告板上的每张小票只有一面朝外,因此当前只能看到它的菜品或桌号之一。

题目描述

服务进行到一半时,一位不满的顾客抱怨道:

“我们已经等了好几个小时,但到现在只上过番茄汤!能不能快一点?”

设这位顾客所在的桌号为 t,他所声称唯一收到的菜品为 m。Diana 需要验证以下命题:

公告板上所有属于桌号 t 的小票,其菜品都为 m

形式化地说,对于公告板上的每张完整小票 Ld,均应满足

d=tL=m.d=t\Longrightarrow L=m.

如果公告板上没有任何属于桌号 t 的小票,Diana 也认为该命题为真。

Diana 知道中央计算机中记录的全部订单,也知道公告板上的小票一定对应这些订单中的一个子多重集。但是,由于每张公告板小票只露出一面,她可能需要翻开若干张小票才能确定命题究竟为真还是为假。

你需要帮助 Diana:

  • 如果不翻任何小票就能证明命题为真,输出 true
  • 如果不翻任何小票就能证明命题为假,输出 false
  • 否则,找出一个需要翻开的公告板小票集合,使得翻开这些小票后一定可以判断该命题的真假,并令集合大小最小。

所有需要翻开的小票必须在真正翻票之前一次性决定,不能根据翻开后的结果再临时选择其他小票。

输入格式

输入包含四部分:

  • 第一行包含两个整数 n,kn,k1kn5001\le k\le n\le 500),分别表示中央计算机中的订单数量和公告板上的小票数量。
  • 第二行包含 nn 个字符串,表示计算机中的全部订单。每个字符串由一个大写英文字母 AZ 和一个数字 09 组成。
  • 第三行包含 kk 个字符,依次表示公告板上各张小票当前朝外的一面。每个字符为一个大写英文字母或一个数字。
  • 第四行包含一个数字 t 和一个大写英文字母 m,表示需要验证的命题:“桌号 t 的所有已完成菜品均为 m。”

保证公告板上的小票可以与计算机中的某个订单子多重集一一对应。

输出格式

如果无需翻开任何小票就能证明命题为真,输出:

true

如果无需翻开任何小票就能证明命题为假,输出:

false

否则,先输出必须翻开的小票数量,然后输出这些小票在公告板上的编号。编号从 11 开始,顺序任意。

如果存在多个最小方案,可以输出任意一个。

本题答案可能不唯一。在 Hydro OJ 中部署时需要使用 Special Judge 检查方案的最小性与合法性。

样例 1

输入

6 4
A1 A2 B1 B2 C1 C2
A B 1 2
1 A

输出

2
3 2

样例 2

输入

5 4
A1 B1 C2 C1 A2
2 A B 1
1 A

输出

false

样例 3

输入

4 4
Z0 Z0 F9 F9
Z 0 9 9
4 F

输出

true