#include using namespace std; int main(){ int n; cin >> n; vector able(n+1,-1); queue> que; que.push({1,1}); while(!que.empty()){ pair check = que.front(); que.pop(); if(able[check.first] != -1){ continue; } if(check.first <0 || check.first >n){ continue; } able[check.first] = check.second; bitset<16> x = check.first; int diff = x.count(); que.push({check.first-diff,check.second+1}); que.push({check.first+diff,check.second+1}); } cout << able[n] << endl; }