상자 열기

시간 제한2초메모리 제한512 MB

요약
N개의 버튼 중 하나뿐인 정답 버튼을 항상 알아내는 데 필요한 고정된 동시 누름 검사 횟수의 최솟값을 구하고, 각 검사에서 누를 버튼 집합을 출력한다.
난이도

보통10점 중 7점

유형
조합론, 수학, 구현, 비트 연산
정답자
아직 제출이 없습니다

문제

현욱은 신비한 밀림에서 1년 동안 스승님의 수행을 돕고 그 보상으로 보물 상자를 하나 받았다. 이 상자에는 1번 버튼부터 NN번 버튼까지 NN개의 버튼이 있는데, 이 중 하나의 버튼만이 상자를 열 수 있는 버튼이고 나머지 버튼은 잘못된 버튼이다. 버튼을 하나만 누를 경우, 잘못된 버튼을 누르면 상자는 영영 열 수 없게 된다.

상자의 버튼은 여러 개를 동시에 누를 수도 있는데, 동시에 누를 경우 누른 버튼에 올바른 버튼이 포함되어 있으면 상자에서 딩동 소리가 나고, 그렇지 않으면 삐삐 소리가 난다. 이 경우 잘못된 버튼들만 눌러도 상자를 못 열게 되지는 않는다.

하지만 버튼 여러 개를 동시에 누를 때엔 바로 답을 알려주는 게 아니라 버튼을 누르고 10분에서 20분쯤 지나야 소리가 난다. 참을성이 없는 현욱은 정답 버튼이 무엇인지 최대한 빨리 확인하고 싶다.

또 현욱은 머리를 쓰는 걸 싫어해서, 정해진 버튼들을 쭉 눌러보고 그 결과로부터 정답 버튼을 바로 알아낼 방법을 찾고 싶다. 즉, 정답 버튼이 무엇이든 상관없이 항상 정해진 순서대로 같은 버튼 집합들을 눌러보기만 하면 정답 버튼을 찾을 수 있는 방법을 알고 싶다.

현욱을 도와, 어떠한 경우에도 올바른 버튼이 무엇인지 확인할 수 있으려면 최소 몇 번 버튼들을 누른 결과를 확인해봐야 하는지와 그때 눌러야 하는 각각의 버튼 집합들을 출력하는 프로그램을 작성해보자.

입력

첫째 줄에 정수 NN이 주어진다.

출력

첫째 줄에 최소한으로 테스트해보아야 하는 횟수 KK를 출력한다.

둘째 줄부터 한 줄에 하나씩 한 번에 눌러 볼 버튼 집합을 KK줄에 걸쳐 출력한다. 각 줄의 첫 번째 수는 한 번에 같이 눌러 볼 버튼의 개수 KiK_i이고, 그다음 KiK_i개 수는 같이 눌러 볼 버튼의 번호이다. KiK_i는 반드시 2 이상의 수여야 한다.

답이 여러 가지라면 그 중 아무것이나 출력해도 된다.

제한

  • 3≤N≤1053 \le N \le 10^5

예제1

  1. 예제 1

    입력
    3
    예상 출력
    2
    2 1 3
    2 1 2