만드는 중입니다

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

페탸와 동전

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

요약
n개의 동전과 재질이 서로 달라야 하는 m개의 쌍이 주어질 때, 유일한 구리 동전이 될 수 있는 동전을 모두 찾습니다.
난이도

보통10점 중 7점

유형
그래프, 유니온 파인드, 분할 정복
정답자
아직 제출이 없습니다

문제

골동품 수집가 페탸는 17세기에 만들어진 진짜 구리 동전을 사려고 가게에 갔다. 가게 주인은 재고로 있는 17세기 동전 nn개를 보여 주었다. 각 동전은 철, 구리, 청동 중 한 가지 재료로 만들어졌다. 녹이 슬어서 어떤 동전이 어떤 재료인지는 알 수 없다.

페탸가 원하는 동전을 쉽게 찾도록, 주인은 mm개의 동전 쌍을 보여 주었다. 각 쌍의 두 동전은 서로 다른 재료로 만들어졌다. 주인은 또한 nn개의 동전 중 정확히 하나가 구리로 만들어졌다고 말했다. 페탸는 주인이 준 정보를 바탕으로 구리일 수 있는 동전을 모두 사기로 했다.

더 정확히 말하면, 페탸는 pp번 동전을 다음 경우가 가능할 때에만 산다. pp번 동전을 제외한 나머지 동전이 모두 철 또는 청동이고, pp번 동전이 구리이며, 주인이 말한 mm개의 쌍마다 두 동전의 재료가 서로 다른 경우다.

페탸가 살 동전을 구하라.

입력

첫 줄에 두 정수 nn과 mm (1≤n≤3⋅1061 \leq n \leq 3 \cdot 10^6, 0≤m≤3⋅1060 \leq m \leq 3 \cdot 10^6)이 주어진다. 각각 동전의 개수와 쌍의 개수다. 이어서 mm개의 줄에 두 정수 aia_i와 bib_i (1≤ai,bi≤n1 \leq a_i, b_i \leq n, ai≠bia_i \neq b_i)가 주어진다. 재료가 서로 다른 두 동전의 번호다. 입력에 주어지는 모든 쌍은 서로 다르다.

출력

주인이 잘못 말해서 구리일 수 있는 동전이 하나도 없다면 0 (따옴표 없이)을 출력한다. 그렇지 않으면 첫 줄에 페탸가 사는 동전의 개수 xx를 출력한다. 둘째 줄에는 페탸가 사는 동전의 번호 cic_i (1≤ci≤n1 \leq c_i \leq n)를 오름차순으로 xx개 출력한다.

힌트

첫 번째 예제에서 동전 2와 3이 철이고 동전 4가 청동이면 동전 1이 구리일 수 있다. 동전 1과 3이 철이고 동전 4가 청동이면 동전 2가 구리일 수 있다. 동전 1, 2, 4를 철과 청동만으로 만들 수 없으므로 동전 3은 구리일 수 없다. 동전 2와 3이 철이고 동전 1이 청동이면 동전 4가 구리일 수 있다.

두 번째 예제에서는 다른 동전이 철이면 어떤 동전이든 구리일 수 있다.

세 번째 예제에서는 주인이 잘못 말했으므로 구리일 수 있는 동전이 없다.

예제4

  1. 예제 1

    입력
    4 3
    1 2
    1 4
    4 2
    
    예상 출력
    3
    1 2 4
    
  2. 예제 2

    입력
    2 1
    1 2
    
    예상 출력
    2
    1 2
    
  3. 예제 3

    입력
    6 6
    1 2
    4 5
    2 3
    5 6
    1 3
    4 6
    
    예상 출력
    0
    
  4. 예제 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