#include #define FOR(i,a,b) for(int i = (a); i < (b); ++i) #define REP(i,n) FOR(i,0,n) #define SZ(n) (int)(n).size() #define ALL(n) (n).begin(), (n).end() #define MOD % 1000000007 #define INF 100000000 using namespace std; typedef long long LL; typedef vector VI; typedef pair PI; int popcount(int t) { int cnt = 0; while (t) { cnt += t & 1; t >>= 1; } return cnt; } int main() { int n; cin >> n; VI v(n + 1, INF); v[1] = 1; queue q; q.push(1); while (!q.empty()) { int a = q.front(); q.pop(); int b = popcount(a); if (a - b > 1 && v[a - b] > v[a] + 1) { v[a - b] = v[a] + 1; q.push(a - b); } if (a + b <= n && v[a + b] > v[a] + 1) { v[a + b] = v[a] + 1; q.push(a + b); } } cout << (v[n] == INF ? -1 : v[n]) << endl; return 0; }