$N=<>; for(1..$N**2){ $_[$y][$x]=sprintf'%03d',$_; $t=$x+(1,0,-1,0)[$d]; $u=$y+(0,1,0,-1)[$d]; if($t>=$N||$u>=$N||$_[$u][$t]){ $d=$d+1&3; } $x+=(1,0,-1,0)[$d]; $y+=(0,1,0,-1)[$d]; } print"@$_\n"for@_