Problem:
ぐるぐる模様

「ぐるぐる模様」を表示するプログラムを作成することにしました。「ぐるぐる模様」は以下のようなものとします。

1 辺の長さが n の場合、n 行 n 列の文字列として表示する。

左下隅を基点とし，時計回りに回転する渦状の模様とする。

線のある部分は #（半角シャープ）、空白部分は " "（半角空白）で表現する。

線と線の間は空白を置く。

整数 n を入力とし，1 辺の長さが n の「ぐるぐる模様」を出力するプログラムを作成してください。

Input

入力は以下の形式で与えられます。

d
n1
n2
:
nd

１行目にデータセットの数 d (d ≤ 20)、続く d 行に i 個目のぐるぐる模様の辺の長さ ni (1 ≤ ni ≤ 100) がそれぞれ１行に与えられます。

Output

データセットごとに、ぐるぐる模様を出力してください。データセットの間に１行の空行を入れてください。

Sample Input

2
5
6

Output for the Sample Input

#####
# #
# # #
# # #
# ###

######
# #
# ## #
# # #
# # #
# ####

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;

import static java.lang.Math.*;
import static java.util.Arrays.*;

public class Main{

	Scanner sc=new Scanner(System.in);

	int INF=1<<28;
	double EPS=1e-9;

	int m;

	void run(){
		for(int n=sc.nextInt(); n>0; n--){
			m=sc.nextInt();
			solve();
		}
	}

	void solve(){
		char[][] cs=new char[m][m];
		for(int k=0; k<m; k++){
			Arrays.fill(cs[k], ' ');
		}

		int i=-1, j=m-1;
		int a;
		for(int k=0;;){
			// up
			for(i++, a=0; j-k>=0; j--, a++)
				cs[j][i]='#';
			if(a<3)
				break;
			// right
			for(j++, a=0; i+k<m; i++, a++)
				cs[j][i]='#';
			if(a<3)
				break;
			// down
			for(i--, a=0; j+k<m; j++, a++)
				cs[j][i]='#';
			if(a<3)
				break;
			k+=2;
			// left
			for(j--, a=0; i-k>=0; i--, a++)
				cs[j][i]='#';
			if(a<3)
				break;
		}
		for(int k=0; k<m; k++){
			println(new String(cs[k]));
		}
		println("");
	}

	void debug(Object... os){
		System.err.println(Arrays.deepToString(os));
	}

	void print(String s){
		System.out.print(s);
	}

	void println(String s){
		System.out.println(s);
	}

	public static void main(String[] args){
		// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
		new Main().run();
	}
}