CF875C National Property
题目描述
众所周知,Bookland 的图书馆是世界上最大的图书馆,馆内藏书数以万计。
一些冗长且无趣的故事被删去了……
Bookland 的字母表极为庞大,因此其字母以正整数表示。每个字母都有小写和大写,大写字母 $x$ 表示为 $x'$。Bookland 通用的 BSCII 编码规定,大写字母依其数字递增排列,小写字母亦依数字递增排列,但所有大写字母都排在所有小写字母之前。例如,满足如下条件:$2 < 3$,$2' < 3'$,$3' < 2$。
一个单词 $x_1, x_2, ..., x_a$ 不大于字典序上的 $y_1, y_2, ..., y_b$,当且仅当下列两个条件之一成立:
- $a \leq b$ 且 $x_1=y_1, ..., x_a=y_a$,即第一个单词是第二个单词的前缀;
- 存在某个位置 $1 \leq j \leq \min(a,b)$,使得 $x_1=y_1, ..., x_{j-1}=y_{j-1}$ 并且 $x_j < y_j$,即在第一个不同的位置,第一个单词的字母比第二个单词的字母小。
例如,单词“$3'$ $7$ $5$”在字典序上排在“$2$ $4'$ $6$”之前。若一个单词序列中,每个单词都不大于下一个单词的字典序,则称该序列为字典序序列。
Denis 有一个仅包含小写字母的单词序列。他想要将其中一些字母转为大写(我们称该操作为“升格”),使得整个单词序列为字典序排列。然而,他很快发现他无法只更改某个单词中的单个字母。他只能选择某种字母,并将所有单词中的该字母全部“升格”成大写。对于 Bookland 字母表中的任意字母,他都可以对其执行此操作,且不限次数。
请帮助 Denis 选出需要升格的大写字母,使得该单词序列成为字典序序列,或判定是否无法实现。
注意,某些单词可能是完全相同的。
输入格式
第一行包含两个整数 $n$ 和 $m$($2 \leq n \leq 100000$,$1 \leq m \leq 100000$),分别表示单词数量和 Bookland 字母表中字母的数量。字母用 $1$ 到 $m$ 之间的整数表示。
接下来的 $n$ 行,每行描述一个单词,格式为 $l_i, s_{i,1}, s_{i,2}, ..., s_{i,l_i}$($1 \leq l_i \leq 100000$,$1 \leq s_{i,j} \leq m$),其中 $l_i$ 表示单词长度,$s_{i,j}$ 为该单词第 $j$ 个字母。单词按照 Denis 手中的序列顺序给出。
保证所有单词的总长度不超过 $100000$。
输出格式
第一行若有解,输出“Yes”,否则输出“No”。
若存在可行方案,第二行输出需要升格的大写字母数量 $k$,第三行输出 $k$ 个不同的字母编号,顺序不限。若有多解,输出其中一种即可。
说明/提示
在第一个样例中,Denis 将字母 $2$ 和 $3$ 升格为大写后,序列变为:
- $2'$
- $1$
- $1$ $3'$ $2'$
- $1$ $1$
满足 $2' < 1$,因此第一个单词不大于第二个单词。第二个单词是第三个单词的前缀,满足字典序。第三个与第四个单词首字母相同,且 $3' < 1$,因此第三个单词不大于第四个单词。
第二个样例中,单词本身已按字典序排序,Denis 可不做任何操作。
第三个样例中,不存在任何字母升格方案能使序列字典序有序。
由 ChatGPT 5 翻译