N = gets.to_i def f(x, dp) y = [] x.each { |i| j = i.to_s(2).count('1') [1, -1].each { |s| k = i + s * j if k <= N and not dp.include?(k) y.push(k) dp[k] = dp[i] + 1 end } } if y.size > 0 f(y, dp) end dp end dp = f([1], {1 => 1}) ans = if dp.include?(N) dp[N] else -1 end puts ans