$n=shift;($c,$f,$l,@m)=(1,0,--$n); {$m[$f][$_]=$c++for($f..$l);$m[$_][$l]=$c++for($f+1..$l); $m[$l][$l-$_+$f-1]=$c++for($f..$l-1);for($_=--$l;$_>$f;--$_){$m[$_][$f]=$c++} $m[$f][$l]=$c if(++$f==$l);redo unless$f>$l}my$w=(int log$c); print"".(join"",map{sprintf"%${w}d",$_}@{$m[$_]})."\n"for(0..$n)