CF1019C Sergey's problem

题目描述

Sergey 五岁了!当他一岁的时候,他的父母给了他一个数;当他两岁的时候,他的父母给了他一个整数数组;三岁时他收到了一个字符串;当他四岁时,他的妈妈轻轻地叫醒他,让他做一个好孩子并给了他一棵有根树。今天是他的五岁生日!他收到了一份来自父母的有向图(没有自环)。 因为他很有好奇心,他决定找出一个集合 $Q$,使得其中的点两两之间没有连边,且对于不在集合中的任意一点 $v$ ,都存在集合内的一点 $u$ ,使得从 $u$ 出发,最多经过两条边就能到达 $v$ 。输出任意一组解。

输入格式

第一行两个正整数 $n, m$($1\leq n, m\leq 10 ^ 6$)表示图的点数和边数。 接下来 $m$ 行每行两个整数 $a, b$($1\leq a, b\leq n$,$a\neq b$)表示 $a$ 到 $b$ 有一条有向边,可能有重边。

输出格式

第一行输出整数 $k$ 表示集合中有 $k$ 个点。 第二行输出 $k$ 个整数表示集合中的点。保证有解。

说明/提示

在第一个样例中,点 $1,3,4,5$ 彼此不连,而点 $1$ 可以仅通过一条边到点 $2$。 在第二个样例,你可以使用一步到点 $1$,使用两步到点 $2$。 以下图片展示了样例及其答案。 ![第一个测试样例囊囊囊](https://espresso.codeforces.com/e737ed292c7f5dfe415658fd9b6602a1aee29e28.png) ![第二个测试样例囊囊囊](https://espresso.codeforces.com/6d227e133bc34a9510789c9526286afc69c02eb0.png)