캘빈볼 팀 나누기
시간 제한1초메모리 제한256 MB
서로 싫어하는 선수가 같은 팀이 되지 않게 최대 14명을 가장 적은 팀으로 나누고 팀 번호 순서를 사전 순으로 가장 작게 정합니다.
문제
캘빈볼 대회에 선수 명이 참가한다. 선수는 번부터 번까지 번호로 구분하며, 모든 선수는 비어 있지 않은 팀 중 정확히 하나에 들어간다. 팀의 개수에는 제한이 없다.
선수 중에는 서로 싫어하는 쌍이 있다. 싫어하는 관계는 대칭이다. 선수 가 선수 를 싫어하면 도 를 싫어한다.
대회 조직위원회가 팀 편성 규칙을 바꿨다. 서로 싫어하는 두 선수는 같은 팀에 들어갈 수 없고, 이 조건을 지키는 편성 중에서 팀의 개수가 가장 적어야 한다.
예를 들어 캘빈, 홉스, 수지, 톰, 제리, 배트맨 여섯 명이 경기를 하고, 배트맨은 나머지 다섯 명을 모두 싫어하고 톰은 제리와 홉스를 싫어한다고 하자. 이때 세 팀으로 경기를 할 수 있다. 배트맨 혼자, 톰과 수지, 캘빈과 홉스와 제리로 나누면 된다. 두 팀으로는 할 수 없다. 배트맨과 톰과 제리가 서로 싫어하므로 셋이 모두 다른 팀에 있어야 하기 때문이다. 네 팀도 답이 아니다. 더 적은 팀으로 나누는 방법이 있기 때문이다.
누가 누구를 싫어하는지 주어질 때, 규칙을 지키는 팀 편성을 구한다.
입력
첫째 줄에 선수의 수 과 서로 싫어하는 쌍의 수 이 공백으로 구분되어 주어진다. (, )
다음 개의 줄에는 서로 다른 두 정수 와 가 주어진다. (, ) 선수 와 선수 가 서로 싫어한다는 뜻이다. 같은 쌍이 두 번 주어지지는 않는다.
출력
첫째 줄에 팀 개수의 최솟값 를 출력한다.
팀에는 번부터 번까지 번호를 붙인다. 이어지는 개의 줄 중 번째 줄에 번 팀에 속한 선수의 번호를 오름차순으로, 공백 하나로 구분해 출력한다.
개의 팀으로 나누는 방법이 여러 가지면 다음 기준으로 하나를 고른다. 선수 가 속한 팀의 번호를 라고 할 때, 수열 이 사전순으로 가장 앞서는 편성을 출력한다. 즉 팀의 개수를 최솟값 로 유지하면서 을 최대한 작게, 그다음 를 최대한 작게, 이런 식으로 차례대로 정한다. 이 기준을 만족하는 편성은 하나뿐이다.
이면 첫째 줄에 만 출력하고 끝낸다.