F(1)=1, F(2)=2인 피보나치 수열에서 이웃하지 않는 항들의 합으로 N을 나타내되 항의 개수가 최대가 되도록 하고, 불가능하면 -1을 출력한다.
*이 문제는 실제 인물과 관련이 없습니다.*
먼 옛날에 사냐라는 사람이 살았다. 사냐에게는 뢰벗이라는 친구가 있었는데, 둘은 무척 닮았지만 뢰벗이 조금 더 똑똑하고 사냐가 조금 더 잘생겼다고 한다. 뢰벗은 오보워치(Ovorwatch)라는 게임에서 500점에 머물러 상위 100.00%였다. 사냐는 그런 뢰벗을 놀리기 좋아했다. 열을 받은 뢰벗은 자신이 오보워치 500점을 탈출하면 사냐가 자신이 내는 문제를 평생 풀도록 하겠다는 내기를 걸었고, 사냐는 설마 탈출하겠냐는 생각으로 받아들였다.
그런데 그 일이 벌어졌습니다.
뢰벗은 점수를 무려 600점대까지 올렸고, 사냐는 내기 때문에 뢰벗이 내는 문제를 평생 풀어야 하게 되었다. 뢰벗이 낸 문제는 이렇다. 자신이 주는 자연수를 연속하지 않은 피보나치 수의 합으로 나타내라. 여기서 피보나치 수열은 F(1)=1F(1) = 1F(1)=1, F(2)=2F(2) = 2F(2)=2, F(n+2)=F(n+1)+F(n)F(n+2) = F(n+1) + F(n)F(n+2)=F(n+1)+F(n)으로 정의한다. 연속하지 않는다는 말은 고른 항의 번호가 이웃하지 않는다는 뜻이다. 멍청한 사냐는 피보나치 수열을 손으로 계산하느라 시간이 너무 오래 걸려 미칠 것만 같아졌다. 똑똑한 뢰벗은 그것도 계산 못 하냐며 놀렸고, 사냐는 시무룩해졌다. 시무룩해진 사냐의 노동을 덜어 줄 프로그램을 짜 보자.
첫째 줄에 자연수 NNN이 주어진다. (1≤N<10181 \le N < 10^{18}1≤N<1018)
NNN을 i1<i2<⋯<iki_1 < i_2 < \dots < i_ki1<i2<⋯<ik이고 이웃한 두 번호가 연속하지 않는, 즉 모든 jjj에 대해 ij+1−ij≥2i_{j+1} - i_j \ge 2ij+1−ij≥2인 F(i1)+F(i2)+⋯+F(ik)F(i_1) + F(i_2) + \dots + F(i_k)F(i1)+F(i2)+⋯+F(ik)로 나타낼 수 있다면, 첫째 줄에 kkk를 출력하고 둘째 줄에 F(i1),F(i2),…,F(ik)F(i_1), F(i_2), \dots, F(i_k)F(i1),F(i2),…,F(ik)를 공백으로 구분해 출력한다. 나타낼 수 없다면 첫째 줄에 −1-1−1을 출력한다. 여러 가지 방법으로 나타낼 수 있다면 그 가운데 항의 수가 가장 많은 것을 출력한다.