#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
const int max=110;
int main(){
int t;
scanf("%d",&t);
int n;
int a[21][21];
while(t--){
scanf("%d",&n);
memset(a,0,sizeof(a));
a[0][n/2]=1;
int i=0,j=n/2;
int x,y;
for(int k=2;k<=n*n;k++){
x=i-1;y=j+1;
if(x<0)x=n-1;
if(y>n-1)y=0;
//开始将数组全部置为0的好处,判断某位置是否有数只需if(位置)就行。
if(a[x][y]){
a[++i][j]=k;
}
else {
a[x][y]=k;
i=x;j=y;
}
}
for(int j=0;j<n;j++){
for(int z=0;z<n;z++)
//输出格式一共占4格,%4d就可以,输出默认为右对齐,且不用加空格。
//左对齐:%-4d,-表示为左对齐。
printf("%4d",a[j][z]);
printf("\n");
}
}
return 0;
}