시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 41 10 9 52.941%

문제

피보나치 진법이란 0과 1만을 이용해 자연수를 유일하게 표현하는 방법이다.

자연수 \(N\)을 피보나치 진법 \(N=\overline { a_{n}a_{n-1}\cdots a_{1} } _{F} \) 으로 나타냈을 때, \(N\)의 값은 \(N=a_{ n }\cdot F_{ n }+a_{ n-1 }\cdot F_{ n-1}+ \cdots + a_1 \cdot F_1\)이 된다. \(F_k\)는 피보나치 수열로 \(F_0 = F_1 = 1, F_i = F_{i-1} + F_{i-2}\)이다. 각 자연수를 유일하게 표현하기 위해서 피보나치 진법에서는 1이 인접할 수 없다.

다음은 자연수 일부를 피보나치 진법으로 나타낸 것이다.

\[ 1 = 1_F \\ 2 = 10_F \\ 3 = 100_F \\ 4 = 101_F \\ 5 = 1000_F \\ 6 = 1001_F \\ 7 = 1010_F \]

상근이는 자연수를 피보나치 진법으로 순서대로 나타낸 뒤, 그 수를 모두 붙였다. 즉, 이 문열의 첫 부분은 110100101100010011010... 이 된다.

상근이는 이 문자열의 처음 N글자 중에 1의 개수가 몇 개나 있는지 궁금해졌다.

N이 주어졌을 때, 상근이가 만든 문자의 처음 N글자 중 1의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (0 ≤ N ≤ 1015)

출력

첫째 줄에 상근이의 문자열의 처음 N글자 중 1의 개수를 출력한다.

예제 입력

21

예제 출력

10

힌트