#include <bits/stdc++.h>
using namespace std;
map<long long, int> DP;
long long fDP(long long N) {
  if (N <= 0) return -1e9;
  if (N == 1) return 0;
  if (N == 2) return 1;
  if (DP.count(N)) return DP[N];
  long long mi = N / 2;
  long long ans = 0;
  if (abs(fDP(mi) - fDP(N - mi)) <= 1)
    ans = max(ans, max(fDP(mi), fDP(N - mi)) + 1);
  if (abs(fDP(mi + 1) - fDP(N - mi - 1)) <= 1)
    ans = max(ans, max(fDP(mi + 1), fDP(N - mi - 1)) + 1);
  if (N - mi - 2 > 0 and abs(fDP(mi + 2) - fDP(N - mi - 2)) <= 1)
    ans = max(ans, max(fDP(mi + 1), fDP(N - mi - 1)) + 1);
  return DP[N] = ans;
}
int main() {
  long long N;
  vector<long long> F(2, 1);
  while (F.back() < 1e18) F.push_back(F.back() + F[F.size() - 2]);
  while (cin >> N) {
    cout << upper_bound((F).begin(), (F).end(), N) - F.begin() - 2 << endl;
  }
}
