import java.util.Scanner; public class Main { private static int N; private static int min = -1; //そこには何手でたどり着けるか private static int array[] = new int[10000]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); func(1, 1); System.out.println(min); } private static void func(int a, int c){ //現在地点が対象の範囲外 if(a<1 || a>N){ return ; } //現在地点に到達するための最小手数でない if(array[a-1] !=0 && array[a-1]<=c){ return ; } array[a-1] = c; //ゴールに到達するための最小手数でない if(min != -1 && c>=min){ return; } //ゴールに到達 if(a==N){ min = c; } int b = Integer.bitCount(a); func(a+b, c+1); func(a-b, c+1); } }