#include<cstdio>
#define max(a,b) a>b?a:b
using namespace std;
const int N=101;
int n,a[N];
bool dfs(int k,int limit){
if(a[k]==n) return 1;
if(k==limit) return 0;
int maxx=0;
for(int i=0;i<=k;i++) maxx=max(maxx,a[k]);
/*剪枝,如果每次把指数*2,这是最大的增长方式,如果这样还是比n小,就退出吧*/
if(maxx<<(limit-k)<n) return 0;
for(int i=k;i>=0;i--){/*这里采用倒序循环可以加快速度,先选出比较大的数计算,可以加快扩展速度*/
a[k+1]=a[i]+a[k];
if(dfs(k+1,limit)) return 1;
a[k+1]=a[k]-a[i];
if(dfs(k+1,limit)) return 1;
}
return 0;
}
int find(){
if(n==1)return 0;
a[0]=1;
for(int i=1;i<=20;i++) if(dfs(0,i)) return i;/*依次加深深度*/
}
int main(){
scanf("%d",&n);
printf("%d\n",find());
return 0;
}