local n = io.read("*n") task = {} done = 0 tasknum = 1 table.insert(task, 1) local function getbit(x) local cnt = 0 while(0 < x) do if(x % 2 == 1) then cnt = cnt + 1 end x = math.floor(x / 2) end return cnt end local len = {} for i = 1, n do len[i] = -1 end len[1] = 1 while(done < tasknum) do done = done + 1 local curidx = task[done] local b = getbit(curidx) if(0 < curidx - b) then if(len[curidx - b] == -1) then len[curidx - b] = len[curidx] + 1 tasknum = tasknum + 1 table.insert(task, curidx - b) end end if(curidx + b <= n) then if(len[curidx + b] == -1) then len[curidx + b] = len[curidx] + 1 tasknum = tasknum + 1 table.insert(task, curidx + b) end end end print(len[n])