#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define FOR(i,a,b) for(ll i=(a);i<(b);++i) #define ALL(v) (v).begin(), (v).end() #define p(s) cout<<(s)<> N; vector visited(N+1, false); vector dist(N+1, -1); queue que; que.push(1); visited[1] = true; dist[1] = 1; while(!que.empty()){ ll index = que.front(); que.pop(); // ビットの数 bitset<20> bs(index); ll bit_count = bs.count(); // 行き先2箇所 ll next = index + bit_count; if(1<=next && next<=N && !visited[next]){ que.push(next); visited[next] = true; dist[next] = dist[index] + 1; } next = index - bit_count; if(1<=next && next<=N && !visited[next]){ que.push(next); visited[next] = true; dist[next] = dist[index] + 1; } } p(dist[N]); return 0; }