import java.util.Arrays; import java.util.Scanner; public class Yukicoder03 { static int N; static int[] bitCount = new int[10001]; static int[] memo = new int[10001]; static int count = 0; static int min = Integer.MAX_VALUE; static boolean found = false; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); String buf; Arrays.fill(bitCount, 0); for (int i = 1; i <= 10000; i++) { buf = Integer.toBinaryString(i); for (int j = 0; j < buf.length(); j++) { if (buf.charAt(j) == '1') bitCount[i]++; } } // search Arrays.fill(memo, 0); count = 1; search(1); if (found) System.out.println(min); else System.out.println(-1); } private static void search(int n) { if (memo[n] != 0 && memo[n] <= count) return; memo[n] = count; if (n == N) { found = true; min = Math.min(min, count); return; } count++; if (n - bitCount[n] >= 1) search(n - bitCount[n]); if (n + bitCount[n] <= N) search(n + bitCount[n]); count--; } }