#P14887. [OOI2019预选赛long]Петя и монеты Petya与硬币

[OOI2019预选赛long]Петя и монеты Petya与硬币

题目描述

集邮爱好者 Petya 去商店购买自己梦寐以求的藏品:一枚真正的十七世纪铜币。

商店里的卖家向 Petya 展示了现有的 nn 枚十七世纪硬币。每枚硬币由三种材料之一制成:铁、铜或青铜。不幸的是,时间没有放过这些硬币,它们都已经生锈,因此无法判断每枚硬币到底由什么材料制成。

为了帮助 Petya 找到目标硬币,卖家告诉他 mm 对硬币编号,并说明每一对中的两枚硬币由不同材料制成。此外,卖家还告诉 Petya:这 nn 枚硬币中恰好有一枚是铜币。

为了得到心仪的硬币,Petya 决定购买所有“可能是铜币”的硬币。

更形式化地说,当且仅当存在一种可能情况,使得:

  • 编号为 pp 的硬币是铜币;
  • 所有编号不为 pp 的硬币都由铁或青铜制成;
  • 对卖家给出的每一对编号,这两枚硬币的材料都不同;

Petya 才会购买编号为 pp 的硬币。

请确定 Petya 会购买哪些硬币。

输入格式

第一行包含两个整数 n,mn,m

  • nn:商店中十七世纪硬币的数量;
  • mm:卖家告诉 Petya 的“材料不同”的硬币对数量。

接下来 mm 行,每行包含两个整数 ai,bia_i,b_i,表示编号为 aia_ibib_i 的两枚硬币由不同材料制成。

满足:

$$1 \le n \le 3\cdot 10^6,\quad 0 \le m \le 3\cdot 10^6,$$1ai,bin,aibi.1 \le a_i,b_i \le n,\quad a_i \ne b_i.

保证输入中的硬币对两两不同。

输出格式

如果卖家弄错了,导致没有任何一枚硬币可能是铜币,输出:

0

否则,第一行输出一个整数 xx,表示 Petya 会购买的硬币数量。

第二行输出 xx 个整数 cic_i,按升序排列,表示 Petya 会购买的硬币编号。

样例

样例 1

4 3
1 2
1 4
4 2
3
1 2 4

样例 2

2 1
1 2
2
1 2

样例 3

6 6
1 2
4 5
2 3
5 6
1 3
4 6
0

样例 4

12 14
1 2
3 2
3 4
5 4
5 6
6 7
3 8
8 9
9 6
2 10
10 12
12 11
11 7
1 7
4
2 3 6 7

样例解释

在第一个样例中:

  • 编号为 11 的硬币可能是铜币,例如编号为 2,32,3 的硬币是铁,编号为 44 的硬币是青铜。
  • 编号为 22 的硬币可能是铜币,例如编号为 1,31,3 的硬币是铁,编号为 44 的硬币是青铜。
  • 编号为 33 的硬币不可能是铜币,因为编号为 1,2,41,2,4 的硬币不可能只用铁和青铜两种材料满足所有“不同材料”条件。
  • 编号为 44 的硬币可能是铜币,例如编号为 2,32,3 的硬币是铁,编号为 11 的硬币是青铜。

在第二个样例中,任意一枚硬币都可能是铜币;例如另一枚硬币可以是铁币。

在第三个样例中,卖家一定弄错了,没有任何硬币可能是铜币。

子任务

组别 分数 nn mm 说明
0 样例测试
1 9 15\le 15 100\le 100
2 11 5000\le 5000
3 21 100000\le 100000
4 28 106\le 10^6
5 31