올해도 캘빈볼 대회가 열린다. 한 경기에는 이름이 모두 다른 n명이 참가하고, 참가자는 비어 있지 않은 팀 여러 개로 나뉜다. 참가자 중 일부는 서로 싫어한다. 싫어하는 관계는 대칭이라서, a가 b를 싫어하면 b도 a를 싫어한다.
조직위원회는 팀 편성 규칙을 바꾸었다. 서로 싫어하는 두 사람은 같은 팀에 들어갈 수 없고, 이 조건을 지키면서 팀 수를 최소로 만들어야 한다.
예를 들어 캘빈, 홉스, 수지, 톰, 제리, 배트맨이 경기에 참가하고, 배트맨은 나머지 다섯 명을 모두 싫어하고 톰은 제리와 홉스를 싫어한다고 하자. 배트맨 혼자, 톰과 수지, 캘빈과 홉스와 제리로 나누면 세 팀으로 경기를 치를 수 있다. 배트맨과 톰과 제리는 서로 싫어해서 셋이 모두 다른 팀에 들어가야 하므로 두 팀으로는 나눌 수 없다. 세 팀이 가능하므로 네 팀도 답이 아니다.
누가 누구를 싫어하는지 주어질 때, 규칙을 지키면서 팀 수가 최소인 편성을 구하라. 그런 편성이 여럿이면 출력에서 정한 기준으로 하나를 고른다.
첫째 줄에 참가자 수 n과 서로 싫어하는 쌍의 개수 m이 공백으로 구분되어 주어진다. 0≤n≤24이고 0≤m≤n(n−1)/2이다. 참가자는 1번부터 n번까지 번호가 붙어 있다.
다음 m개 줄 중 i번째 줄에는 서로 다른 두 정수 ai와 bi가 주어진다. 1≤ai,bi≤n이고, ai번 참가자와 bi번 참가자는 서로 싫어한다. 같은 쌍은 두 번 주어지지 않는다.
첫째 줄에 팀 수 t를 출력한다. 이어지는 t개 줄 중 i번째 줄에는 i번 팀에 속한 참가자의 번호를 오름차순으로 공백으로 구분해 출력한다. n이 0이면 첫째 줄에 0만 출력하고 팀 줄은 출력하지 않는다.
팀 수가 최소인 편성이 여럿일 수 있으므로 다음 기준으로 하나를 고른다. 먼저 팀 번호를 정한다. 1번 팀은 1번 참가자가 속한 팀이고, j번 팀은 1번부터 j−1번 팀에 속하지 않은 참가자 중 번호가 가장 작은 참가자가 속한 팀이다. i번 참가자가 속한 팀 번호를 ci라고 하면, 팀 수가 최소인 모든 편성 가운데 수열 c1,c2,…,cn이 사전순으로 가장 앞서는 편성을 출력한다.