你正在为新的操作系统开发调度模块。该模块接收 $n$ 个待执行的任务以及它们之间的依赖关系,并按特定顺序进行执行。
更正式地说,共有 $n$ 个任务,编号从 $1$ 到 $n$。你还获得了 $m$ 个依赖关系,编号从 $1$ 到 $m$;第 $i$ 个依赖关系由两个数字 $a_i$ 和 $b_i$ 描述,表示任务 $a_i$ 必须在任务 $b_i$ 之前执行。
在某些情况下,会出现循环依赖——即根据给定的依赖关系,任务 $t_1$ 必须在 $t_2$ 之前执行,$t_2$ 在 $t_3$ 之前执行,以此类推,直到 $t_{k-1}$ 在 $t_k$ 之前执行,且 $t_k$ 在 $t_1$ 之前执行。循环依赖会给调度带来问题,因此你决定删除部分给定的依赖关系,使得剩余的依赖关系集合中不包含任何循环。
然而,你仍然需要保留至少 $m/2$ 个原始依赖关系,以保留部分原始信息。请编写程序完成此任务。
输入格式
- 第一行包含两个数字 $n$ 和 $m$ ($2 \le n \le 10^5$, $1 \le m \le 3 \cdot 10^5$)。
- 接下来 $m$ 行,每行包含两个数字 $a_i$ 和 $b_i$ ($1 \le a_i, b_i \le n, a_i \neq b_i$),描述任务 $a_i$ 和 $b_i$ 之间的对应依赖关系。
输出格式
如果存在满足条件的依赖关系子集,第一行输出 YES,否则输出 NO。
若输出 YES,第二行应包含所选依赖关系的个数 $k$(请注意 $k$ 必须至少为 $m/2$),第三行应包含 $k$ 个数字,即所选依赖关系的编号。编号按照输入中给出的顺序从 $1$ 到 $m$ 进行标识。
样例
样例输入 1
3 3 1 2 2 3 3 1
样例输出 1
YES 2 1 2
样例输入 2
2 5 1 2 1 2 1 2 2 1 2 1
样例输出 2
YES 3 1 2 3
样例输入 3
4 4 1 2 2 3 2 4 3 4
样例输出 3
YES 4 1 2 3 4