만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

바이킹 마을

시간 제한2초메모리 제한1024 MB

요약
방향 그래프가 주어졌을 때 모든 정점의 도달 가능한 집합이 같은 루트 트리가 있는지 판단하고, 있으면 각 정점의 부모를 출력합니다.
난이도

보통10점 중 7점

유형
그래프, 위상 정렬, DFS
정답자
아직 제출이 없습니다

문제

익킹은 마을의 지시 체계가 매우 복잡하다는 것을 알아챘다. 마을에는 nn명의 바이킹이 살고 있고, 1부터 nn까지 번호가 붙어 있다. 익킹은 mm개의 쌍 aia_i, bib_i를 적었다. 이는 aia_i번 바이킹이 bib_i번 바이킹에게 임무를 맡길 수 있다는 뜻이다. 임무를 받은 바이킹은 자신이 임무를 맡길 수 있는 바이킹에게 그 임무를 다시 넘길 수 있다.

바이킹 xx의 임무가 바이킹 yy까지 도달하면, yy는 xx의 부하라고 한다.

익킹은 이 체계가 너무 복잡하고 비효율적이라고 본다. 그래서 새 체계를 도입하려 한다. 새 체계에는 리더가 정확히 한 명 있고, 누구도 그 리더에게 임무를 맡길 수 없다. 리더를 제외한 모든 바이킹은 정확히 한 명의 다른 바이킹으로부터 임무를 받는다. 리더의 임무는 마을의 모든 바이킹에게 도달해야 한다. 즉, 새 체계는 뿌리에서 간선이 바깥으로 뻗는 루트 트리가 된다. 익킹은 모든 xx에 대해, 바이킹 xx의 부하 집합이 새 체계와 옛 체계에서 같기를 원한다.

익킹은 아직 그런 체계를 찾지 못했다. 그런 체계가 존재하는지 판단하고, 존재한다면 아무거나 하나를 찾아 달라.

입력

첫째 줄에 바이킹의 수 nn과 옛 체계에서 임무를 맡길 수 있는 쌍의 수 mm이 주어진다 (1≤n,m≤5000001 \le n, m \le 500000).

다음 mm개의 줄에는 정수 쌍 aia_i, bib_i가 주어진다. 옛 체계에서 aia_i번 바이킹이 bib_i번 바이킹에게 임무를 맡길 수 있다는 뜻이다 (1≤ai,bi≤n1 \le a_i, b_i \le n, ai≠bia_i \ne b_i). 같은 쌍이 여러 번 나올 수 있다.

출력

조건을 만족하는 체계가 없으면 No를 출력한다.

있으면 첫째 줄에 Yes를 출력하고, 둘째 줄에 정수 p1,p2,…,pnp_1, p_2, \ldots, p_n을 nn개 출력한다. ii번 바이킹이 새 체계의 리더라면 pi=−1p_i = -1이다. 그렇지 않으면 pip_i는 새 체계에서 ii번 바이킹에게 임무를 맡기는 바이킹의 번호이다 (1≤pi≤n1 \le p_i \le n, i≠pii \ne p_i).

예제1

  1. 예제 1

    입력
    3 3
    1 2
    2 3
    1 3
    
    예상 출력
    Yes
    -1 1 2