/*
正解是迭代加深
这样搜索的规模就大大减小
同样的维护已经得到的mi数组
数组的大小对应做了几次运算
加上几个剪枝:
如果mi中最大的<<(deep-k) 都到不了n 搜索失败
生成新的mi的时候 尽量组合数大的 这样也可以减小规模
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 101
using namespace std;
int n,a[N<<2];
int dfs(int k,int deep)
{
if(a[k]==n) return deep;
if(deep==k) return 0;
int maxx=0;
for(int i=0;i<=k;i++)maxx=max(maxx,a[k]);
if(maxx<<(deep-k)<n)return 0;
for(int i=k;i>=0;i--)
{
a[k+1]=a[k]+a[i];
if(dfs(k+1,deep)) return 1;
a[k+1]=a[k]-a[i];
if(dfs(k+1,deep)) return 1;
}return 0;
}
int main()
{
scanf("%d",&n);
if(n==1)
{
printf("0\n");
return 0;
}
a[0]=1;
for(int i=1;i<=N;i++)
if(dfs(0,i))
{
printf("%d\n",i);
return 0;
}
return 0;
}