#include <iostream>
#include <queue>
#include <utility>
#include <cstdio>
using namespace std;
//英语 看博友分析 抄博友程序 bfs 巧妙 简洁 背
int vis[20300][150];
int n;
struct nod{
int num1;
int num2;
int step;
};
queue<nod> que;
bool add(int num1, int num2, int step)
{
if(num1==n || num2==n)
{
return true;
}
if(num1<num2)
{
swap(num1,num2);
}
if(num1==num2 || num1>n+105 ||num2>105)//背 不加后两个条件运行时错误
{
return false;
}
if(vis[num1][num2]==0)
{
vis[num1][num2]=1;
que.push((nod){num1,num2,step});
}
return false;
}
int main()
{
cin>>n;
add(1,0,0);
while(que.empty()!=1)
{
nod t=que.front();
que.pop();
int num1=t.num1;
int num2=t.num2;
int step=t.step;
if(add(num1+num1,num2,step+1)||add(num1+num1,num1,step+1)||add(num2+num2,num1,step+1)||(add(num2+num2,num2,step+1)||//背
add(num1+num2,num1,step+1)||add(num1+num2,num2,step+1)
||add(num1-num2,num1,step+1)||add(num1-num2,num2,step+1)))
{
printf("%d\n",step+1);
break;
}
}
return 0;
}