#include int ans[16384]; int dist[16384]; int N; void solve(int p, int depth) { if( not ( 1 <= p and p <= N ) ) { return; } if( not ( ans[p] > depth ) ) { return; } ans[p] = depth; solve(p+dist[p], depth+1); solve(p-dist[p], depth+1); return; } int main() { int count; int temp; std::cin >> N; for(int i = 1; i <= N; ++i) { ans[i] = 10000; } for(int i = 1; i <= N; ++i) { temp = i; count = 0; while( temp != 0 ) { if( (temp & 0x01) != 0 ) { count += 1; } temp >>= 1; } dist[i] = count; } solve(1, 1); if( ans[N] != 10000 ) { std::cout << ans[N] << std::endl; } else { std::cout << "-1" << std::endl; } return 0; }