#coding=UTF-8 def getnoone(zahl): if kiroku[zahl]==None: kiroku[zahl]=getnoone(zahl//2)+zahl%2 return kiroku[zahl] N=int(input()) hosu=[-1]*(N+1) hosu[1]=1 koushin=[1] tesu=1 kiroku=[None]*(N+1) kiroku[0]=0 kiroku[1]=1 while koushin: tmp=[] tesu=tesu+1 for masu in koushin: if masu-getnoone(masu)>0: if hosu[masu-getnoone(masu)]==-1: hosu[masu-getnoone(masu)]=tesu tmp.append(masu-getnoone(masu)) if masu+getnoone(masu) <=N: if hosu[masu+getnoone(masu)]==-1: hosu[masu+getnoone(masu)]=tesu tmp.append(masu+getnoone(masu)) koushin=tmp #print(kiroku) #print(hosu) print(hosu[N])