캘빈볼 대회 팀 편성

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

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

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

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

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

입력

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

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

출력

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

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