import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

public class Euler692 {
    static List<Long> fibUpto(long n) {
        List<Long> f = new ArrayList<>();
        f.add(0L);
        f.add(1L);
        f.add(2L);

        while (f.get(f.size() - 1) <= n) {
            f.add(f.get(f.size() - 1) + f.get(f.size() - 2));
        }
        return f;
    }

    public static String solve() {
        long n = 23416728348467685L;
        List<Long> f = fibUpto(n);

        long[] pref = new long[f.size()];
        if (f.size() > 1)
            pref[1] = 0L;
        if (f.size() > 2)
            pref[2] = 1L;

        for (int m = 2; m + 1 < f.size(); ++m) {
            pref[m + 1] = pref[m] + f.get(m) + pref[m - 1];
        }

        long x = n;
        long out = 0L;

        while (x > 0L) {
            int pos = Collections.binarySearch(f, x);
            if (pos < 0) {
                pos = -(pos + 1) - 1;
            } else {
                while (pos + 1 < f.size() && f.get(pos + 1).equals(x)) {
                    pos++;
                }
            }

            int m = pos;
            out += pref[m] + f.get(m);
            x -= f.get(m);
        }

        return Long.toString(out);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
