n = gets.chomp.to_i @memo = Hash.new(0) step = 1 set = [1] @memo[1] = 1 while set.length > 0 next_set = [] step += 1 set.each do |i| move = i.to_s(2).scan('1').length if i + move <= n && !@memo.key?(i + move) @memo[i + move] = step next_set << i + move end if i - move > 1 && !@memo.key?(i - move) @memo[i - move] = step next_set << i - move end end set = next_set end unless @memo.key?(n) puts '-1' else puts @memo[n] end