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 C# (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Test1 {

    


    class ClassMain {

        static char[,] uzu = new char[0, 0];
        static int uzuL = -1;

        static void goUp(int y, int x) {
            //Console.WriteLine(y + "-" + x);
            if ((x == 0 || uzu[y, x - 1] == ' ')
                && (y == 0 || uzu[y - 1, x] == ' ')) { uzu[y, x] = '#'; }
            else { return; }

            if (y == 0) { goRight(y, x + 1); }
            else if (y == 1) { goUp(y - 1, x); }
            else if (uzu[y - 2, x] == '#') { goRight(y, x + 1); }
            else { goUp(y - 1, x); }
        }

        static void goRight(int y, int x) {
            //Console.WriteLine(y + "-" + x);
            if ((x == uzuL - 1 || uzu[y, x + 1] == ' ')
                && ( uzu[y + 1, x] == ' ')) { uzu[y, x] = '#'; }
            else { return; }

            if (x == uzuL-1) { goDown(y+1, x ); }
            else if (x == uzuL-2) { goRight(y, x+1); }
            else if (uzu[y, x+2] == '#') { goDown(y+1, x); }
            else { goRight(y , x+1); }
        }

        static void goDown(int y, int x) {
            //Console.WriteLine(y + "-" + x);
            if ((uzu[y, x - 1] == ' ')
                && (y==uzuL-1 || uzu[y + 1, x] == ' ')) { uzu[y, x] = '#'; }
            else { return; }

            if (y == uzuL - 1) { goLeft(y , x-1); }
            else if (y == uzuL - 2) { goDown(y+1, x ); }
            else if (uzu[y+2, x] == '#') { goLeft(y , x-1); }
            else { goDown(y + 1, x); }
        }

        static void goLeft(int y, int x) {
            //Console.WriteLine(y + "-" + x);
            if ((x == 0 || uzu[y, x - 1] == ' ')
                && ( uzu[y - 1, x] == ' ')) { uzu[y, x] = '#'; }
            else { return; }

            if (uzu[y , x-2] == '#') { goUp(y-1, x ); }
            else { goLeft(y , x-1); }
        }


        public static void Main(String[] args) {
            string line;
            while ((line = Console.ReadLine()) != null) {
                int n = int.Parse(line);
                //if (line.Equals("0")) { break; }
                for (int i = 0; i < n; i++) {
                    int k = int.Parse(Console.ReadLine());
                    if (k == 1) { 
                        Console.WriteLine("#");
                        if (i != n - 1) { Console.WriteLine(); }
                        continue;
                    }
                    uzu = new char[k, k];
                    uzuL = k;
                    for (int j = 0; j < k; j++) {
                        for (int x = 0; x < k; x++) {
                            uzu[j, x] = ' ';
                        }
                    }
                    //uzu initiated.
                    goUp(k - 1, 0);

                    for (int j = 0; j < k; j++) {
                        for (int x = 0; x < k; x++) {
                            Console.Write(uzu[j, x]);
                        }
                        Console.WriteLine();
                    }
                    if (i != n - 1) { Console.WriteLine(); }
                }
                break;
            }
        }

        
    }



    
}