그래프의 싱크

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

방향 그래프 $G = (V, E)$가 주어진다.

임의의 두 노드 $u, v \in V$에 대해, $E$에 속한 간선만을 이용해 $u$에서 $v$로 가는 경로가 존재하면 이를 $u \to v$로 표기한다.

노드 $v \in V$가 자신에서 도달할 수 있는 모든 노드로부터 다시 $v$로 돌아오는 경로를 가진다면, 즉 다음 조건을 만족하면 $v$를 싱크(sink) 라고 부른다.

$$\forall w \in V,\ (v \to w) \implies (w \to v)$$

그래프 $G$의 모든 싱크를 모은 집합을 $\mathrm{bottom}(G)$로 표기한다.

$$\mathrm{bottom}(G) = {, v \in V : \forall w \in V,\ (v \to w) \implies (w \to v) ,}$$

주어진 그래프 $G = (V, E)$에 대해 $\mathrm{bottom}(G)$를 구하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫 줄에는 노드의 수 $n$ ($1 \le n \le 5,000$)과 음이 아닌 정수 $m$ ($0 \le m \le 100,000$)이 주어진다. 이는 $V = {1, 2, \dots, n}$이고 간선의 수가 $|E| = m$임을 뜻한다.

이어서 각 간선을 나타내는 $m$개의 정수 쌍 $v_1\ w_1\ v_2\ w_2\ \dots\ v_m\ w_m$이 공백으로 구분되어 주어진다. 각 쌍 $(v_i, w_i)$는 간선 $(v_i, w_i) \in E$를 의미하며, 이 정수들은 여러 줄에 걸쳐 나타날 수 있다.

$n$이 $0$인 값이 주어지면 입력이 끝난 것이며, 이 경우는 처리하지 않고 프로그램을 종료해야 한다.

출력

각 테스트 케이스마다 $\mathrm{bottom}(G)$에 속한 모든 노드를 한 줄에 출력한다. 노드는 오름차순으로 정렬하고 공백으로 구분한다. 만약 $\mathrm{bottom}(G)$가 공집합이면 빈 줄을 출력한다.