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