//碰到一道之字转换的题,想起来以前用C语言写过
//#define LOCAL
#include<stdio.h>
#include<math.h>
#define MAXN 100
void get_zigzag(int(*a)[MAXN], int ns);
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int a[MAXN][MAXN],n;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",*(a+i)+j);
get_zigzag(a,n);
for(int i=0;i<n-1;i++)
for(int j=0;j<n;j++)
printf("%d ",a[i][j]);
for(int j=0;j<n-1;j++) printf("%d ",a[n-1][j]);
printf("%d\n",a[n-1][n-1]);
return 0;
}
void get_zigzag(int (*a)[MAXN],int n)
{//72变
int x=0,y=0,b[MAXN*MAXN],tot=0;
b[0]=a[0][0];
while(1)
{
if(y+1<n) b[++tot]=a[x][++y];//右移
while(x+1<n&&y-1>=0) b[++tot]=a[++x][--y];//左下移
if(x+1<n) b[++tot]=a[++x][y];//下移
else break;
while(x-1>=0&&y+1<n) b[++tot]=a[--x][++y];//右上移
if(y==n-1) break;//跳出循环
}
if(n%2==0) goto lable;
while(1)
{
if(x+1<n) b[++tot]=a[++x][y];//下移
while(x+1<n&&y-1>=0) b[++tot]=a[++x][--y];//左下移
lable: if(y+1<n) b[++tot]=a[x][++y];//右移
else break;
while(x-1>=0&&y+1<n) b[++tot]=a[--x][++y];//右上移
}//逆序,找到规律可简化代码
tot=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=b[tot++];
}//get_zigzag \