피라미드
시간 제한5초메모리 제한512 MB
돌의 개수가 주어질 때, 높이가 2 이상인 서로 다른 높은 피라미드와 낮은 피라미드만으로 모든 돌을 정확히 사용하는 최소 개수의 조합을 찾고, 크기를 사전순으로 최대화하며, 불가능하면 impossible을 출력한다.
문제
크기가 같은 정육면체 돌을 충분히 많이 가지고 있으면 피라미드를 쌓을 수 있다. 피라미드에는 두 종류가 있다.
높은 피라미드. 맨 아래에 돌을 정사각형으로 놓고, 그 위에 , 다시 그 위에 을 놓는 식으로 한 층마다 한 변을 1씩 줄여 가며 맨 위에는 한 개를 놓는다. 밑변의 길이가 인 높은 피라미드의 높이는 이고, 사용하는 돌의 개수는 이다.
낮은 피라미드. 맨 아래에 을 놓고, 그 위부터는 한 변을 2씩 줄여 , , … 를 쌓는다. 밑변의 길이가 짝수이면 맨 위는 , 홀수이면 맨 위는 이 된다. 밑변의 길이가 인 낮은 피라미드의 높이는 이다.
아주 오래전, 엄청나게 많은 정육면체 돌을 물려받은 파라오가 있었다. 그는 이 돌을 모두 사용해 피라미드를 지으라고 명령했다. 설계자는 돌의 개수에 따라 지을 수 있는 피라미드가 달라진다고 설명했다. 예를 들어 돌이 10개이면 밑변이 3인 낮은 피라미드를, 5개이면 밑변이 2인 높은 피라미드를 지을 수 있지만, 7개이면 돌을 모두 써서 만들 수 있는 피라미드가 하나도 없다.
이 말을 들은 파라오는 크게 화를 냈고, 며칠을 고민한 끝에 다음 조건을 내걸었다.
- 모든 돌을 남김없이 사용해야 한다.
- 피라미드는 한 개 이상 지으며, 그 개수는 가능한 한 적어야 한다.
- 같은 모양(같은 종류이면서 밑변의 길이가 같은)의 피라미드는 최대 한 개만 지을 수 있다.
- 각 피라미드의 높이는 2 이상이어야 한다. 즉 높은 피라미드는 밑변이 2 이상, 낮은 피라미드는 밑변이 3 이상이어야 한다.
- 위 조건을 지키면서, 가장 많은 돌을 쓰는 피라미드를 최대한 크게 만든다.
- 그다음으로, 두 번째로 많은 돌을 쓰는 피라미드를 최대한 크게 만든다.
- 이후에도 같은 방식으로 세 번째, 네 번째 … 피라미드의 크기를 차례로 최대화한다.
돌의 개수가 주어졌을 때, 위 조건을 지켜 피라미드를 어떻게 지어야 하는지 구하여라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄이며, 돌의 개수 ()가 주어진다. 마지막 줄에는 이 하나 주어지며, 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다, 먼저 테스트 케이스 번호 (1부터 시작)를 사용해 Case t: 를 출력한다. 이어서 지을 피라미드들을 돌을 많이 쓰는 것부터 차례대로, 공백으로 구분해 출력한다. 각 피라미드는 밑변의 길이를 적고 그 뒤에 낮은 피라미드이면 L, 높은 피라미드이면 H를 붙여 나타낸다 (예: 밑변이 3인 높은 피라미드는 3H). 사용하는 돌의 개수가 완전히 같은 두 피라미드가 있으면 높은 피라미드(H)를 먼저 출력한다. 파라오의 조건을 만족하도록 피라미드를 지을 수 없으면 impossible을 출력한다.