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