덧셈 체인
시간 제한1초메모리 제한256 MB
100 이하의 각 n에 대해 n으로 끝나는 최단 덧셈 사슬을 구하고, 그중 사전순으로 가장 작은 것을 출력한다.
문제
어떤 자연수 에 대하여, 다음 네 조건을 모두 만족하는 자연수 수열 을 의 덧셈 체인이라고 한다.
- 모든 에 대하여 를 만족하는 두 첨자 (, 허용)가 존재한다.
즉, 첫 항은 이고 마지막 항은 이며, 수열은 순증가하고, 각 항은 앞선 두 항(같은 항을 두 번 사용해도 된다)의 합으로 만들어진다. 항의 개수가 가장 적은(즉 이 최소인) 덧셈 체인을 가장 짧은 덧셈 체인이라고 한다.
가장 짧은 덧셈 체인은 여러 개일 수 있다. 그러한 체인들 중에서 사전순으로 가장 앞서는 것을 출력하라. 두 수열의 사전순 비교는 앞에서부터 항을 하나씩 비교하여, 처음으로 값이 달라지는 위치에서 더 작은 값을 가지는 수열이 앞선다고 정한다.
자연수 이 여러 개 주어질 때, 각각에 대하여 가장 짧은 덧셈 체인 중 사전순으로 가장 앞서는 것을 구하는 프로그램을 작성하시오.
입력
입력은 하나 이상의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄에 자연수 ()이 주어진다. 입력의 마지막 줄에는 이 하나 주어지며, 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다 한 줄에, 가장 짧은 덧셈 체인 중 사전순으로 가장 앞서는 것을 공백으로 구분하여 출력한다.