상자 열기
시간 제한2초메모리 제한512 MB
N개의 버튼 중 하나뿐인 정답 버튼을 항상 알아내는 데 필요한 고정된 동시 누름 검사 횟수의 최솟값을 구하고, 각 검사에서 누를 버튼 집합을 출력한다.
문제
현욱은 신비한 밀림에서 1년 동안 스승님의 수행을 돕고 그 보상으로 보물 상자를 하나 받았다. 이 상자에는 1번 버튼부터 번 버튼까지 개의 버튼이 있는데, 이 중 하나의 버튼만이 상자를 열 수 있는 버튼이고 나머지 버튼은 잘못된 버튼이다. 버튼을 하나만 누를 경우, 잘못된 버튼을 누르면 상자는 영영 열 수 없게 된다.
상자의 버튼은 여러 개를 동시에 누를 수도 있는데, 동시에 누를 경우 누른 버튼에 올바른 버튼이 포함되어 있으면 상자에서 딩동 소리가 나고, 그렇지 않으면 삐삐 소리가 난다. 이 경우 잘못된 버튼들만 눌러도 상자를 못 열게 되지는 않는다.
하지만 버튼 여러 개를 동시에 누를 때엔 바로 답을 알려주는 게 아니라 버튼을 누르고 10분에서 20분쯤 지나야 소리가 난다. 참을성이 없는 현욱은 정답 버튼이 무엇인지 최대한 빨리 확인하고 싶다.
또 현욱은 머리를 쓰는 걸 싫어해서, 정해진 버튼들을 쭉 눌러보고 그 결과로부터 정답 버튼을 바로 알아낼 방법을 찾고 싶다. 즉, 정답 버튼이 무엇이든 상관없이 항상 정해진 순서대로 같은 버튼 집합들을 눌러보기만 하면 정답 버튼을 찾을 수 있는 방법을 알고 싶다.
현욱을 도와, 어떠한 경우에도 올바른 버튼이 무엇인지 확인할 수 있으려면 최소 몇 번 버튼들을 누른 결과를 확인해봐야 하는지와 그때 눌러야 하는 각각의 버튼 집합들을 출력하는 프로그램을 작성해보자.
입력
첫째 줄에 정수 이 주어진다.
출력
첫째 줄에 최소한으로 테스트해보아야 하는 횟수 를 출력한다.
둘째 줄부터 한 줄에 하나씩 한 번에 눌러 볼 버튼 집합을 줄에 걸쳐 출력한다. 각 줄의 첫 번째 수는 한 번에 같이 눌러 볼 버튼의 개수 이고, 그다음 개 수는 같이 눌러 볼 버튼의 번호이다. 는 반드시 2 이상의 수여야 한다.
답이 여러 가지라면 그 중 아무것이나 출력해도 된다.