#include<iostream>
#include<queue>
using namespace std;
int n,a,b;
struct node
{
int x;
int d;
node(int xx,int dd)
{
x=xx;
d=dd;
}
};
int v[1010];//判断是否走过
queue<node>q;
void bfs(int m,int step)
{
q.push(node(m,step));
v[m]=1;
while(!q.empty() )
{
if(q.front().x==b)
{
cout<<q.front().d;
break;
}
if(q.front().x+1<n&&!v[q.front().x+1])
{
v[q.front().x+1]=1;
q.push(node(q.front().x+1,q.front().d+1));
}
if(q.front().x-1>=0&&!v[q.front().x-1])
{
v[q.front().x-1]=1;
q.push(node(q.front().x-1,q.front().d+1));
}
if(q.front().x*2<n&&!v[q.front().x*2])
{
v[q.front().x*2]=1;
q.push(node(q.front().x*2,q.front().d+1));
}
q.pop() ;
}
}
int main()
{
cin>>n>>a>>b;
bfs(a,0);
return 0;
}