/** * Created by n on 2017/06/11. */ import java.util.* inline fun adjlist(i : Int) : Array { return arrayOf((i + 1) - Integer.bitCount(i + 1) - 1, (i + 1) + Integer.bitCount(i + 1) - 1) } fun main(args: Array) { val cin = Scanner(System.`in`) val N = cin.nextInt() val inf = Integer.MAX_VALUE / 3 val nil = Integer.MIN_VALUE / 3 var q: Queue = ArrayDeque() val lst = Array(N, { i -> i }) var d = Array(N, { inf }) var pi = Array(N, { nil }) var visited = BooleanArray(N) val s = 0 d[s] = 0 visited[s] = true q.add(0) while (q.isNotEmpty()) { val u = q.remove() val adj = adjlist(u) for (v in adj) { if (v < 0 || v >= N || visited[v]) { continue } visited[v] = true d[v] = d[u] + 1 q.add(v) } } val ans = if (d[N - 1] == inf) { -1 } else { d[N - 1] + 1} println("${ans}") }