@a=(0,@b=1,(-1)x~-<>);while(@b){$a[$_]<0|$a[$_]>($c=$a[$i]+1)and$a[$_]=$c,push@b,$_ for$i+($b=map/1/g,sprintf'%b',$i=shift@b),$i-$b}print$a[-1]