//***
#include<iostream>//本题和数组区域类型的题目关联,745,746,747,748
//一般来讲,设计数字/形状图形的输出,都会涉及到点与点间的距离关系!!(数形结合)
using namespace std;
//观察数组结构
//i,j这个点坐标到上下左右四条边距离的最小值是多少,加一即可?
//距离即为差值,下标相减即可.
//需要注意的是到上下边的距离需要通过行数i来计算
//到左右边的距离需要通过列数j来计算
int main(){
int n;
while(cin>>n&&n)//循环n次,n!=0
{
int arr[n][n],min;
for(int i=0;i<n;i++){//将数组对角线向切
for(int j=0;j<n;j++){
if(i<=j&&i+j<=n-1){//数组的上方区域及其边缘,到上边的距离最短(i-0)
min=i+1;arr[i][j]=min;
}
else if(i>j&&i+j<=n-1){//数组的左方区域,到左边的距离最短(j-0)
min=j+1;arr[i][j]=min;
}
else if(i>=j&&i+j>=n-1){//数组的下方区域及其边缘,到下边的距离最短(n-1-i)
min=n-i;arr[i][j]=min;
}
else if(i<j&&i+j>=n-1){//数组的右方区域,到右边的距离最短(n-1-i)
min=n-j;arr[i][j]=min;
}
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
}
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n,n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int up=i+1,down=n-i,left=j+1,right=n-j;
cout<<min(min(up,down),min(left,right))<<" ";
}
cout<<endl;
}
cout<<endl;
}
}