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: WA: Presentation Error)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{

	static final int UP = 1;
	static final int RIGHT = 2;
	static final int DOWN = 4;
	static final int LEFT = 8;
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int numInput = Integer.parseInt(br.readLine());
		int width = 0;
		for(int i = 0; i < numInput; i++){
			width = Integer.parseInt(br.readLine());
			printSpiral(width);
			if(i == numInput - 1)System.out.println();
		}
	}
	
	public static void printSpiral(int n){
		if(n == 1){
			System.out.println("#");
			return;
		}
		boolean[][] spiral = createSpiral(n);
		for(boolean[] line : spiral){
			for(boolean row : line){
				if(row == true)		System.out.print("#");
				else				System.out.print(" ");
			}
			System.out.println();
		}
	}
	
	private static boolean[][] createSpiral(int n){
		boolean[][] spiral = new boolean[n][n];
		//一番左
		for(int i = 0; i < n; i++){
			spiral[i][0] = true;
		}
		//それ以降
		int[] length = new int[2];
		length[0] = n - 1;
		length[1] = n - 1;
		int direction = RIGHT;
		int c = 0;
		int x = 0, y = 0;
		while(true){
			for(int i = 0; i < length[c % 2]; i++){
				switch(direction){
				case UP:	y--;	break;
				case RIGHT:	x++;	break;
				case DOWN:	y++;	break;
				case LEFT:	x--;	break;
				}
				spiral[y][x] = true;
			}
			length[c++ % 2] -= 2;
			if(length[0] + length[1] < 2)	break;
			direction = direction * 2 % 15;
		}
		return spiral;
	}
}