package main import ( "bufio" "fmt" "os" "strconv" ) var sc = bufio.NewScanner(os.Stdin) func Scanner() string { sc.Scan() return sc.Text() } func main() { buf := make([]byte, 0) sc.Buffer(buf, 100000007) sc.Split(bufio.ScanWords) n, _ := strconv.Atoi(Scanner()) trans := make(map[int]int) fer := []int{1} ans := -1 for i, j := 1, []int{}; len(fer) > 0; i, fer, j = i+1, j, nil { for _, k := range fer { if k == n { ans = i j = nil break } else if trans[k] == 0 { trans[k] = 1 dis := count(k) m := k + dis l := k - dis if m <= n { j = append(j, m) } if l > 0 { j = append(j, l) } } } } fmt.Println(ans) } func count(k int) int { str := fmt.Sprintf("%b", k) c := 0 for _, s := range str { if s == '1' { c += 1 } } return c }