#//经过自己的分析,这个题只用考虑正数即可,同时刚开始时候考虑的是动规,但那样根本无法确定建立多大的数组存储。 //因此考虑递归,递归的思想为贪心。 //偶数的最小值一定是f(x/2)+1,但奇数不一定,因此要去f(x-1),f(x+1)的最小值。

int dfs(int x){
    if(x<0) x=x*-1;
    if(x<=2) return x;
    if(x%2==0){
        return dfs(x/2)+1;   //奇数
    }
    else if(x%2){
        return min(dfs(x-1),dfs(x+1))+1;
    }
    return 0;
}
int main() {
    int x;
    scanf("%d",&x);
    printf("%d",dfs(x));
    
}