메타고니아의 정육면체 분배
면접 대비시간 제한2초메모리 제한256 MB
남은 수를 나누는 가장 큰 2의 거듭제곱으로 나눈 홀수 몫 이하의 가장 큰 3의 거듭제곱을 곱해 떼어내기를 반복한 뒤 오름차순으로 출력합니다.
문제
메타고니아에는 귀족 가문이 100개 있다. 해마다 유일자의 예언자가 그 가운데 몇 가문에 의식용 정육면체를 나누어 준다. 유일자는 분배 규칙을 두 가지 정해 두었다.
- 어떤 가문이 정육면체를 하나 이상 받으면, 그 개수의 소인수는 2 또는 3뿐이다.
- 같은 해에 한 가문이 개, 다른 가문이 개를 받으면 는 로 나누어떨어지지 않고 도 로 나누어떨어지지 않는다.
당신은 유일자의 예언자다. 앞으로 년 동안 해마다 나누어 줄 정육면체 개수를 미리 알고 있다. 해마다 그 해의 정육면체를 남김없이 나누어 주어야 한다.
입력
첫 줄에 앞으로의 햇수 가 주어진다 (). 이어지는 개 줄에 번째 해에 나누어 줄 정육면체 개수 가 한 줄에 하나씩 주어진다 ().
출력
해마다 두 줄을 출력한다. 첫 줄에는 번째 해에 정육면체를 하나 이상 받는 가문의 수 를 출력한다 (). 둘째 줄에는 각 가문이 받는 개수를 오름차순으로 공백으로 구분해 출력한다. 이 수의 합은 와 같다.
규칙을 만족하는 분배가 여럿일 수 있으므로, 다음 절차로 만든 분배 하나만 정답으로 인정한다.
아직 나누어 주지 않은 개수를 이라 하고, 이 0이 될 때까지 다음을 반복한다.
- 을 나누어떨어지게 하는 가장 큰 2의 거듭제곱을 라 하고, 로 둔다. 는 홀수다.
- 를 만족하는 가장 큰 3의 거듭제곱을 라 한다.
- 한 가문에 개를 준다.
- 을 로 바꾼다.
이렇게 고른 개수를 오름차순으로 정렬해 출력한다. 이 절차는 항상 두 규칙을 만족하고 가문 수가 100을 넘지 않는다.