#include <iostream>
#include <queue>
usingnamespace std;
queue<int> ox;
int n, a, b;
int record[5005];
int k[3] = {1, -1};
int main()
{
cin >> n >> a >> b;
ox.push(a);//敲入起始点while (!ox.empty())//遍历从0到n的所有点,找出到达每个点的最小步数 {
int now = ox.front();
ox.pop();
for (int i = 0; i < 3; i++)//对起始点做三操作 {
int newx;
if (i == 2)
newx = now * 2;
else
newx += k[i];
if (newx == a || newx > n || newx < 1 || record[newx] != 0)
continue;//重复排除,过界判断,来过排除
record[newx] = record[now] + 1;//次数记录,到达新点的路由前一点步数加1(bfs达到了就是最小的) ox.push(newx);
}
}
cout<<record[b]<<endl;//直接输出位置次数return0;
}