import java.util.*; import java.math.*; import java.io.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); System.out.println(bfs(N)); } static int bfs(int N) { ArrayDeque queue = new ArrayDeque(); boolean[] visit = new boolean[N]; queue.add(new Data(1,1)); while(!queue.isEmpty()) { Data tmp = queue.poll(); if(tmp.now == N) return tmp.count; if(visit[tmp.now]) continue; visit[tmp.now] = true; int next = Integer.bitCount(tmp.now); if(tmp.now - next > 0) { queue.add(new Data(tmp.now - next,tmp.count+1)); } if(tmp.now + next <= N) { queue.add(new Data(tmp.now + next,tmp.count+1)); } } return -1; } static class Data { int now; int count; Data(int n, int c) { now = n; count = c; } } }