# 2019/12/28 from heapq import heappop,heappush n=int(input()) edge=[set() for _ in range(n+1)] for i in range(n+1): u,v=i,i+bin(i).count('1') if v<=n: edge[u].add(v) u,v=i,i-bin(i).count('1') if v>0: edge[u].add(v) def dijkstra(s): d=[float('inf')]*(n+1) visited=[False]*(n+1) d[s]=1 u=s visited[s]=True que=[] for e in edge[s]: heappush(que,e) while que: v=heappop(que) if visited[v] and d[v]<=d[u]+1:continue d[v]=d[u]+1 visited[v]=True for vtx in edge[v]: if visited[vtx] and d[vtx]<=d[u]+1:continue hq=vtx heappush(que,hq) u=v return d res=dijkstra(1) print(res[n])