n = int(input()) adjacent_list = [[] for i in range(n+1)] for i in range(1,n+1): count = "{:b}".format(i).count('1') if i - count >= 1: adjacent_list[i].append([i-count,1]) if i + count <= n: adjacent_list[i].append([i+count,1]) from heapq import heappush, heappop def dijkstra(start,graph): INF = 10 ** 15 dist = [INF] * (n+1) dist[start] = 0 q = [(0,start)] while q: d,v = heappop(q) if dist[v] < d: continue for w,a in graph[v]: d1 = d + a if dist[w] > d1: dist[w] = d1 heappush(q, (d1,w)) return dist #このまま適当にはって使える感じではない? #隣接リスト適当に渡せば動く。重みを追加するのをわすれずに d = dijkstra(1,adjacent_list) if d[-1] == 10**15: print(-1) else: print(d[-1]+1)