#include using namespace std; typedef pair P; typedef pair> PP; typedef long long ll; const double EPS = 1e-8; const int INF = 1e9; const int MOD = 1e9+7; int dy[] = {0,1,0,-1}; int dx[] = {1,0,-1,0}; int N; vector used; int dfs(int n){ if(n == N)return 0; if(n > N || n < 1 || used[n])return INF; used[n] = true; int mv = __builtin_popcount(n); return min(dfs(n-mv),dfs(n+mv)) + 1; } int main(void) { cin >> N; used.resize(N+1); int ret = dfs(1); if(ret >= INF)cout << -1 << endl; else cout << ret+1 << endl; return 0; }