만드는 중입니다

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

시리얼 2

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

요약
소들이 좋아하는 두 시리얼을 간선으로 본 그래프에서 서로 다른 시리얼 상자에 최대한 많은 소를 배정하는 순서를 구해 굶는 소의 수를 최소화합니다.
난이도

보통10점 중 7점

유형
그래프, 그리디, DFS
정답자
아직 제출이 없습니다

문제

Farmer John의 소들은 아침으로 시리얼을 먹는 것을 가장 좋아한다. 소들은 식욕이 커서 한 끼에 시리얼 한 상자를 통째로 먹는다.

농장에 MM종류의 시리얼이 배송되었다 (2≤M≤105)(2\le M\le 10^5). 각 종류의 시리얼은 상자가 하나뿐이다. NN마리의 소 (1≤N≤105)(1\le N\le 10^5)는 각자 가장 좋아하는 시리얼과 두 번째로 좋아하는 시리얼이 있다. 시리얼을 고를 기회가 주어지면 소는 다음과 같이 행동한다.

  1. 가장 좋아하는 시리얼의 상자가 남아 있으면 그것을 가져가고 떠난다.
  2. 그렇지 않고 두 번째로 좋아하는 시리얼의 상자가 남아 있으면 그것을 가져가고 떠난다.
  3. 그렇지도 않으면 실망하여 음매 하고 울며 시리얼을 가져가지 않고 떠난다.

소들의 순서를 최적으로 정했을 때 굶는 소의 최소 수를 구하라. 또한 그 최소 수를 달성하는 NN마리 소의 순열을 하나 구하라.

입력

첫째 줄에 공백으로 구분된 두 정수 NN과 MM이 주어진다.

1≤i≤N1\le i\le N에 대해 ii번째 줄에는 ii번째 소가 가장 좋아하는 시리얼과 두 번째로 좋아하는 시리얼을 나타내는 두 정수 fif_i와 sis_i가 공백으로 구분되어 주어진다. (1≤fi,si≤M1\le f_i,s_i\le M이고 fi≠sif_i\neq s_i)

출력

굶는 소의 최소 수를 출력하고, 이어서 그 최소 수를 달성하는 1…N1\ldots N의 순열을 출력한다. 최소 수를 달성하는 순열이 여러 개라면 그중 아무거나 출력해도 된다.

힌트

이 경우에는 소 88마리와 시리얼 1010종류가 있다.

처음 세 소는 가장 좋아하는 시리얼이 서로 겹치지 않으므로 마지막 다섯 소와 독립적으로 풀 수 있다.

처음 세 소가 [1,2,3] 순서로 고르면 소 11은 시리얼 22를, 소 22는 시리얼 33을 고르고 소 33은 굶는다.

처음 세 소가 [1,3,2] 순서로 고르면 소 11은 시리얼 22를, 소 33은 시리얼 33을, 소 22는 시리얼 44를 고르므로 세 소 모두 굶지 않는다.

물론 처음 세 소가 모두 굶지 않는 다른 순열도 있다. 예를 들어 [3,1,2] 순서로 고르면 소 33은 시리얼 22를, 소 11은 시리얼 11을, 소 22는 시리얼 33을 고르므로 소 [1,2,3]은 모두 굶지 않는다.

마지막 다섯 소 중에서는 적어도 한 마리가 반드시 굶어야 함을 보일 수 있다.

예제1

  1. 예제 1

    입력
    8 10
    2 1
    3 4
    2 3
    6 5
    7 8
    6 7
    7 5
    5 8
    
    예상 출력
    1
    1
    3
    2
    8
    4
    6
    5
    7