import java.util.*;


public class Solution {

    public int num = 1;

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型二维数组
     */
    public int[][] Matrix (int n) {
        // write code here
        int tR = 0;
        int tC = 0;
        int dR = n - 1;
        int dC = n - 1;
        int[][] matrix = new int[n][n];
        while (tR <= dR && tC <= tR) {
            process(matrix, tR++, tC++, dR--, dC--);
        }
        return matrix;
    }

    public void process(int[][] matrix, int a, int b, int c, int d) {
        if (a == c) {
            for (int i = b; i <= d; i++) {
                matrix[a][i] = num;
                num++;
            }
        } else if (b == d) {
            for (int i = a; i <= c; i++) {
                matrix[i][b] = num;
                num++;
            }
        } else {
            int curC = b;
            int curR = a;
            while (curC != d) {
                matrix[a][curC] = num;
                num++;
                curC++;
            }
            while (curR != c) {
                matrix[curR][d] = num;
                num++;
                curR++;
            }
            while (curC != b) {
                matrix[c][curC] = num;
                num++;
                curC--;
            }
            while (curR != a) {
                matrix[curR][b] = num;
                num++;
                curR--;
            }
        }
    }
}