import java.util.*; public class Main { private static Scanner sc = new Scanner(System.in); public static void main(String[] args) throws Exception { int n = sc.nextInt(); int[] dp = new int[n+1]; Deque que = new ArrayDeque<>(); que.addLast(new Pair(1, 1)); dp[1] = 1; while (true) { if (que.isEmpty()) break; Pair p = que.pollFirst(); int m = count(p.val); int nn = p.val-m; int np = p.val+m; int nc = p.cnt+1; if (nn>0) { if (dp[nn]==0) { dp[nn] = nc; que.addLast(new Pair(nn,nc)); } } if (np<=n) { if (dp[np]==0) { dp[np] = nc; que.addLast(new Pair(np,nc)); } } } if (dp[n]==0) { System.out.println(-1); } else { System.out.println(dp[n]); } } private static int count(int val) { String s = Integer.toBinaryString(val); int ret = 0; for (int i = 0;i < s.length();i++) { if (s.charAt(i)=='1') ret++; } return ret; } static class Pair { public int val; public int cnt; public Pair(int a, int b) { val = a; cnt = b; } } }