from collections import deque n = int(input()) G = [[] for i in range(n)] check, dist = [0 for i in range(n)], [-1 for i in range(n)] def bsf(s): q = deque() check[s], dist[s] = 1, 0 q.append(s) while len(q) != 0: u = q.popleft() for v in range(len(G[u])): if check[G[u][v]] == 0: check[G[u][v]], dist[G[u][v]] = 1, dist[u] + 1 q.append(G[u][v]) check[u] = 2 def main(): for i in range(n): e, cnt = i + 1, 0 while e != 0: if e & 1: cnt += 1 e >>= 1 if i + cnt < n: G[i].append(i+cnt) if i - cnt >= 0: G[i].append(i-cnt) bsf(0) if dist[n-1] == -1: print(-1) else: print(dist[n-1]+1) if __name__ == '__main__': main()