#include //--------------------------- using namespace std; //--------------------------- #define REP(i,n) for(int i = 0; i < (n); i++) #define P(x) cout << (x) << "\n" #define MOD 1e9+7 #define PI acos(-1.0) //--------------------------- const int INF = numeric_limits::max(); //2進法桁和を返す int f(int N) { int cnt = 0; while (N>0) { if(N % 2 == 1) cnt++; N = N / 2; } return cnt; } int main(){ std::ios::sync_with_stdio(false); std::cin.tie(0); int n;cin >>n; queue q;//指標:調べるマス番号を入れる q.push(1); vector v(n+1,INF);//vに最短距離投げ込む v[1] = 1; while (!q.empty()) { int mas = q.front(); q.pop(); int bitsum = f(mas); if (mas - bitsum > 0 && v[mas - bitsum] == INF) { //vに書き込み v[mas - bitsum] = v[mas] + 1; q.emplace(mas - bitsum);//qに現在地入れる } if (mas + bitsum < n+1 && v[mas + bitsum] == INF) { v[mas + bitsum] = v[mas] + 1; q.emplace(mas + bitsum); } } cout << (v[n] == INF ? -1 : v[n]) << "\n"; return 0; }