칼빈볼 선수권 대회 팀 편성

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

문제

올해도 칼빈볼 선수권 대회가 열린다. 한 경기에는 이름이 서로 다른 선수 nn명이 참가하고, 이 선수들을 비어 있지 않은 팀 여러 개로 나눈다. 팀의 개수에는 제한이 없다. 선수 중 일부는 서로 사이가 나쁘다. 사이가 나쁜 관계는 대칭이다. 선수 aa가 선수 bb와 사이가 나쁘면 bbaa와 사이가 나쁘다.

조직위원회는 팀을 짜는 규칙을 바꾸었다. 사이가 나쁜 두 선수는 같은 팀에 들어갈 수 없고, 이 조건을 지키면서 팀의 개수를 최소로 만들어야 한다.

예를 들어 캘빈, 홉스, 수지, 톰, 제리, 배트맨이 경기에 참가하고, 배트맨이 나머지 다섯 명과 모두 사이가 나쁘고, 톰이 제리, 홉스와 사이가 나쁘다고 하자. 이때 팀 세 개로는 경기를 할 수 있다. 배트맨 혼자, 톰과 수지, 캘빈과 홉스와 제리로 나누면 된다. 팀 두 개로는 할 수 없다. 배트맨, 톰, 제리가 서로 사이가 나쁘므로 셋을 각각 다른 팀에 넣어야 하기 때문이다. 팀 네 개도 답이 아니다. 더 적은 개수로 나눌 수 있기 때문이다.

사이가 나쁜 선수 쌍이 주어질 때, 규칙을 지키면서 선수를 팀으로 나누어라.

입력

첫째 줄에 선수의 수 nn과 사이가 나쁜 선수 쌍의 수 mm이 공백을 사이에 두고 주어진다. (0n120 \le n \le 12, 0mn(n1)/20 \le m \le n(n-1)/2) 선수의 번호는 11번부터 nn번까지이다.

다음 mm개의 줄에 각각 서로 다른 두 정수 aia_ibib_i가 주어진다. (1ai,bin1 \le a_i, b_i \le n) 선수 aia_i와 선수 bib_i가 사이가 나쁘다는 뜻이다. 같은 쌍은 두 번 주어지지 않는다.

출력

첫째 줄에 팀의 개수 tt를 출력한다. 다음 tt개의 줄에 각 팀에 속한 선수의 번호를 오름차순으로, 공백을 사이에 두고 출력한다.

팀의 개수가 최소인 나누기는 여러 가지일 수 있으므로 다음 규칙으로 하나만 고른다. 선수 ii가 속한 팀의 번호를 tit_i라 하고, 팀 번호는 처음 등장하는 순서대로 11번부터 매긴다. 즉 t1=1t_1 = 1이고, 모든 ii에 대해 ti1+max(t1,,ti1)t_i \le 1 + \max(t_1, \dots, t_{i-1})이다. 팀의 개수가 최소인 나누기 중에서 수열 (t1,t2,,tn)(t_1, t_2, \dots, t_n)이 사전순으로 가장 앞서는 것을 출력한다. 팀은 11번 팀부터 tt번 팀까지 순서대로 출력한다.

n=0n = 0이면 첫째 줄에 00만 출력한다.