만드는 중입니다

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

캘빈볼 대회 팀 편성

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

요약
서로 싫어하는 사람이 같은 팀에 들지 않도록 최대 24명을 가장 적은 팀으로 나누고 사전 순으로 가장 앞선 최적 배치를 출력합니다.
난이도

보통10점 중 7점

유형
백트래킹, 그래프, 비트 연산
정답자
아직 제출이 없습니다

문제

올해도 캘빈볼 대회가 열린다. 한 경기에는 이름이 모두 다른 nn명이 참가하고, 참가자는 비어 있지 않은 팀 여러 개로 나뉜다. 참가자 중 일부는 서로 싫어한다. 싫어하는 관계는 대칭이라서, aa가 bb를 싫어하면 bb도 aa를 싫어한다.

조직위원회는 팀 편성 규칙을 바꾸었다. 서로 싫어하는 두 사람은 같은 팀에 들어갈 수 없고, 이 조건을 지키면서 팀 수를 최소로 만들어야 한다.

예를 들어 캘빈, 홉스, 수지, 톰, 제리, 배트맨이 경기에 참가하고, 배트맨은 나머지 다섯 명을 모두 싫어하고 톰은 제리와 홉스를 싫어한다고 하자. 배트맨 혼자, 톰과 수지, 캘빈과 홉스와 제리로 나누면 세 팀으로 경기를 치를 수 있다. 배트맨과 톰과 제리는 서로 싫어해서 셋이 모두 다른 팀에 들어가야 하므로 두 팀으로는 나눌 수 없다. 세 팀이 가능하므로 네 팀도 답이 아니다.

누가 누구를 싫어하는지 주어질 때, 규칙을 지키면서 팀 수가 최소인 편성을 구하라. 그런 편성이 여럿이면 출력에서 정한 기준으로 하나를 고른다.

입력

첫째 줄에 참가자 수 nn과 서로 싫어하는 쌍의 개수 mm이 공백으로 구분되어 주어진다. 0≤n≤240 \le n \le 24이고 0≤m≤n(n−1)/20 \le m \le n(n-1)/2이다. 참가자는 11번부터 nn번까지 번호가 붙어 있다.

다음 mm개 줄 중 ii번째 줄에는 서로 다른 두 정수 aia_i와 bib_i가 주어진다. 1≤ai,bi≤n1 \le a_i, b_i \le n이고, aia_i번 참가자와 bib_i번 참가자는 서로 싫어한다. 같은 쌍은 두 번 주어지지 않는다.

출력

첫째 줄에 팀 수 tt를 출력한다. 이어지는 tt개 줄 중 ii번째 줄에는 ii번 팀에 속한 참가자의 번호를 오름차순으로 공백으로 구분해 출력한다. nn이 00이면 첫째 줄에 00만 출력하고 팀 줄은 출력하지 않는다.

팀 수가 최소인 편성이 여럿일 수 있으므로 다음 기준으로 하나를 고른다. 먼저 팀 번호를 정한다. 11번 팀은 11번 참가자가 속한 팀이고, jj번 팀은 11번부터 j−1j-1번 팀에 속하지 않은 참가자 중 번호가 가장 작은 참가자가 속한 팀이다. ii번 참가자가 속한 팀 번호를 cic_i라고 하면, 팀 수가 최소인 모든 편성 가운데 수열 c1,c2,…,cnc_1, c_2, \dots, c_n이 사전순으로 가장 앞서는 편성을 출력한다.

예제3

  1. 예제 1

    입력
    6 7
    1 6
    2 6
    3 6
    4 6
    5 6
    5 4
    2 4
    
    예상 출력
    3
    1 2 3 5
    4
    6
    
  2. 예제 2

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

    입력
    0 0
    
    예상 출력
    0