$*=shift; for($_=1;$_<=$*;$_++){$_[$_]=[split$,,(($*%2)xor($_%2))?ABC:ACB]} for($_=1;$_<2**$*;$_++){ $-=1+length((sprintf("%b",$_)=~/(0*)$/)[0]); printf"Move disk %d from pole %s to pole %s\n",$-,@{$_[$-]}[0,1]; push@{$_[$-]},shift@{$_[$-]} }