#include<iostream>
using namespace std;
int main(){
int n;
int m=0;
cin>>n;
if(n==0){cout<<0<<endl<<endl<<0;}//等于零时
else{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
m++;
if(m<10){
cout<<"0"<<m;
}
else cout<<m;
}
cout<<endl;
}
cout<<endl;
//上面是正方形
m=0;
int p=n;
int r=0;//代表每次循环的空格数
int h;
for(int i=0;i<n;i++){
int k=n-1;//当等于n-1,符合循环次数
r=0;
h=p;//因为一开始第一行就一个数字,所以p直接赋给h,从而打印出p-1个空格
for(;k>0;){//k代表数字的数量,有几个就循环打印几次
m++;
while((--h)>0){
cout<<" ";
r++;//r每次加一,代表多一个空格,
}
if(m<10){cout<<"0"<<m;}
else {cout<<m;}
k=n-r;//一行一共有n个,n减去r(空格的数量)就是数字的数量,
k--;//无论while是否执行,都会内循环一次都会输出数字,也要减一
r++;//因为while循环停止后,r和、不会再加,导致k不变死循环,于是每次循环再加个一
}
cout<<endl;
p-=1;//因为行每次循环一次空格就少一,所以p赋值给h,使其打印出的空格每次都少一
}
}
return 0;
}