#include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<vector> #include<string> #include<sstream> #include<cmath> #include<numeric> #include<map> #include<random> #include<stack> #include<queue> #include<cassert> using namespace std; int inf = 1000000000; int bitcount(int n){ int cnt = 0; while( n != 0 ){ if( n % 2 == 1 ) cnt++; n /= 2; } return cnt; } int main(void) { int n; cin >> n; vector<int> v(n+1, -1); queue<int> q; q.push(1); v[1] = 1; while( !q.empty() ){ int now = q.front(); q.pop(); int cnt = bitcount(now); if( now + cnt <= n && v[now + cnt] == -1 ){ v[now + cnt] = v[now] + 1; q.push( now + cnt ); } if( now - cnt > 0 && v[now - cnt] == -1 ){ v[now - cnt] = v[now] + 1; q.push( now - cnt ); } } cout << v[n] << endl; return 0; }