// 5分くらいかも #include using namespace std; struct NODE{ int x,c; }; int main(){ int N; cin >> N; queue Q; Q.push({1,0}); int ok[11111]={}; while( Q.size() ){ auto q = Q.front(); Q.pop(); if( ok[q.x]++ ) continue; if( q.x > N || q.x < 0 ) continue; if( q.x == N ){ cout << q.c + 1 << endl; return 0; } int c = __builtin_popcount(q.x); Q.push({q.x+c,q.c+1}); Q.push({q.x-c,q.c+1}); } cout << -1 << endl; }