Vasya 使用现代软件包管理器 Vum,在 Vinux 操作系统中安装软件包。
每个软件包都有若干可安装的版本。同一个应用程序一次只能安装其中一个版本。我们将某个应用程序的某个具体版本称为一个软件包。由于不同应用程序的某些版本可能互不兼容,Vum 中存在冲突这一概念。每个冲突都是一个软件包集合,其中至多能安装一个软件包。如果尝试安装同一个冲突列表中的多个软件包,系统就会崩溃,Vasya 不希望发生这种情况。
同一个应用程序的不同版本之间可能存在冲突,也可能不存在。一个冲突中可以包含同一应用程序的多个版本,甚至包含它的所有版本。
由于 Vum 的冲突描述系统相当原始,每个软件包只能出现在一个冲突中。
Vasya 希望安装 $N$ 个不同的应用程序,同时不让他的 Vinux 崩溃。他必须在不违反上述规则的情况下选择应用程序的版本,但 Vum 穷举依赖关系的解析算法无法处理这个任务。Vasya 请你帮助他解决软件包管理器的问题。
输入格式
输入文件的第一行包含一个整数 $N$,表示 Vasya 希望安装的应用程序数量($1 \le N \le 200$)。
接下来的 $N$ 行给出应用程序的描述,其中包含版本列表。一个应用程序的描述由以下以空格分隔的字段组成:
- 应用程序名:由小写拉丁字母组成的字符串,长度为 1 到 10 个字符;
- 版本数量:不大于 $1\,000$ 的正整数;
- 版本号:按升序排列的正整数。
应用程序的编号不大于 $100\,000$。所有应用程序名互不相同。
接下来一行包含数 $K$,表示冲突的数量($0 \le K \le 500$)。
接下来的 $K$ 行描述冲突。每个冲突的描述以正整数 $T$ 开头,表示该冲突中的软件包数量。随后列出 $T$ 个以空格分隔的软件包。每个软件包先给出应用程序名,再给出版本号。
保证冲突中列出的软件包不会重复,且所有版本都在应用程序的描述中出现过。
输出格式
如果无法在没有冲突的情况下安装全部 $N$ 个应用程序,输出文件的唯一一行必须包含单词 No。如果可以,第一行必须包含单词 Yes,第二行必须列出为此应安装的版本号,以空格分隔。
这 $N$ 个应用程序的版本必须按应用程序在输入文件中的描述顺序输出。如果有多种可行的选择方式,输出任意一种。
样例
输入格式 1
3 vim 3 1 2 3 nano 2 5 8 python 2 2 3 2 2 vim 3 nano 8 3 vim 1 nano 5 vim 2
输出格式 1
Yes 2 8 2
输入格式 2
2 firefox 1 38 chrome 1 46 1 2 firefox 38 chrome 46
输出格式 2
No
说明
第一个样例包含两个冲突。第一个冲突禁止同时安装 vim 的第 3 个版本和 nano 的第 8 个版本。第二个冲突表示,vim 的第 1 个版本、nano 的第 5 个版本和 vim 的第 2 个版本中,只能安装其中一个,或者一个也不安装。正确的方案如下:
1 8 21 8 32 8 22 8 33 5 23 5 3
第二个样例有两个应用程序,每个应用程序只有一个版本。然而,唯一的冲突禁止同时安装这两个应用程序。