/*
#include <stdio.h>
int f(int n)
{
int p=0;
while (n>0)
{
p+=n%10;
n/=10;
}
return p;
}
int main()
{
int n;
scanf("%d",&n);
while(n>=10)
{
n=f(n);
}
printf("%d",n);
return 0;
}
#include <stdio.h>
int n, a, b, d[1010];
int maxi(int a,int b)
{
int t=a; // t : 최댓값의 위치
for (int i = a; i<=b; i++)
{
if (d[t]<d[i])
{
t=i;
}
}
return t;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &d[i]);
scanf("%d%d", &a, &b);
printf("%d\n", maxi(a, b));
}
#include <stdio.h>
int gcd(int p, int q){ if(p==0) return q; return gcd(q%p, p);}
long long int lcm(int a, int b)
{
int x = gcd(a,b);
//두 수의 최소공배수*최대공약수 == a*b
return (long long int)a*b/x;
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lld\n", lcm(a, b));
}
#include<stdio.h>
int main()
{
int p=0,n,k=0;
scanf("%d",&n);
while (n!=0)
{
p+=n%10;
k=k*10+n%10;
n/=10;
}
printf("%d\n%d",k,p);
}
*/
#include<stdio.h>
int main()
{
int arr[101][101]= {};
int i,j,d=1,n,k;
scanf("%d",&n);
i=1;
j=1;
for (k=1; k<=n*n; k++)
{
if (d==1)
{
if (j==n)
{
d=2;
}
else
{
arr[i][j++]=k;
}
}
if (d==2)
{
if (i==n)
{
d=3;
}
else
{
arr[i++][j]=k;
}
}
if (d==3)
{
if (j==1)
{
d=4;
}
else
{
arr[i][j--]=k;
}
}
if (d==4)
{
if (i==1)
{
d=1;
}
else
{
arr[i--][j]=k;
}
}
}
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
{
printf("%2d ",arr[i][j]);
}
printf("\n");
}
}



