#include #include #include #include #include #include #include #include #include #include #include using namespace std; const constexpr int INF = 1e9; typedef std::pair P; int N; int dist[10001]; void solve(){ queue que; que.push(1); vector dist(10001, INF); dist[1]=1; while(!que.empty()){ if(que.front()>N) { que.pop(); continue; } int a = que.front(); que.pop(); bitset<15> bits; bits = a; int cnt = bits.count(); int l = a-cnt, r = a+cnt; if(l>0){ if(dist[l]> dist[a]+1) { dist[l] = dist[a]+1; que.push(l); } } if(dist[r]>dist[a]+1){ dist[r] = dist[a]+1; que.push(r); } } if(dist[N]==INF) cout << -1 << endl; else cout << dist[N] << endl; } int main() { cin >> N; solve(); return 0; }