아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

피보나치 수의 합

시간 제한1초메모리 제한128 MB

요약
합이 n이 되는 서로 다른 피보나치 수 가운데 개수가 가장 적은 경우를 증가하는 순서대로 각 테스트 케이스마다 출력합니다.
난이도

보통10점 중 6점

유형
그리디, 수학
정답자
아직 제출이 없습니다

문제

피보나치 수 fkf_k는 fk=fk−1+fk−2f_k = f_{k-1} + f_{k-2}로 정의되며, 초기값은 f0=0f_0 = 0, f1=1f_1 = 1이다. 모든 양의 정수는 서로 다른 피보나치 수 하나 이상의 합으로 나타낼 수 있다는 사실이 잘 알려져 있다.

한 양의 정수를 서로 다른 피보나치 수들의 합으로 나타내는 방법은 여러 가지다. 예를 들어 100100은 f4+f6+f11=3+8+89f_4 + f_6 + f_{11} = 3 + 8 + 89로도, f1+f3+f6+f11=1+2+8+89f_1 + f_3 + f_6 + f_{11} = 1 + 2 + 8 + 89로도, f4+f6+f9+f10=3+8+34+55f_4 + f_6 + f_9 + f_{10} = 3 + 8 + 34 + 55로도 나타낼 수 있다.

이 문제는 한 양의 정수를 개수가 가장 적은 서로 다른 피보나치 수들의 합으로 나타내는 것이다. 양의 정수 nn이 주어질 때, 합이 nn과 같아지면서 사용하는 서로 다른 피보나치 수의 개수가 최소가 되는 조합을 구하라.

입력

입력은 표준 입력으로 받는다. 첫 번째 줄에 테스트 데이터의 개수를 나타내는 정수 TT가 주어진다. 이어지는 각 줄에는 정수 nn이 하나씩 주어진다 (1≤n≤1,000,000,0001 \le n \le 1{,}000{,}000{,}000).

출력

출력은 표준 출력을 사용한다. 각 테스트 데이터마다 답을 한 줄에 출력한다. 합이 주어진 정수 nn과 같아지는 최소 개수의 서로 다른 피보나치 수들을 증가하는 순서로 공백으로 구분하여 출력한다.

예제1

  1. 예제 1

    입력
    4
    100
    200
    12345
    1003
    
    예상 출력
    3 8 89
    1 55 144
    1 34 377 987 10946
    3 13 987