import java.util.*;

public class Euler122 {
    static int[] best;

    static void dfs(List<Integer> chain, int maxDepth, int limit) {
        int depth = chain.size() - 1;
        if (depth >= maxDepth)
            return;
        int last = chain.get(depth);
        for (int i = depth; i >= 0; i--) {
            int nxt = last + chain.get(i);
            if (nxt > limit || nxt <= last)
                continue;
            if (depth + 1 > best[nxt])
                continue;
            if (depth + 1 < best[nxt])
                best[nxt] = depth + 1;
            chain.add(nxt);
            dfs(chain, maxDepth, limit);
            chain.remove(chain.size() - 1);
        }
    }

    public static void main(String[] args) {
        int limit = 200;
        best = new int[limit + 1];
        Arrays.fill(best, Integer.MAX_VALUE);
        best[1] = 0;
        List<Integer> chain = new ArrayList<>();
        chain.add(1);
        for (int md = 1; md <= 15; md++) {
            dfs(chain, md, limit);
            boolean done = true;
            for (int k = 1; k <= limit; k++)
                if (best[k] == Integer.MAX_VALUE) {
                    done = false;
                    break;
                }
            if (done)
                break;
        }
        int sum = 0;
        for (int k = 1; k <= limit; k++)
            sum += best[k];
        System.out.println(sum);
    }
}
