//循环赛日程表
package wkx;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Test {
private static void Copy(int[][] m,int beg,int mid,int end) {
int len=mid-beg+1;
for(int i=beg;i<=mid;i++){
for(int j=0;j<len;j++)
m[i+len][j+len]=m[i][j];
}
for(int i=mid+1;i<=end;i++){
for(int j=0;j<len;j++)
m[i-len][j+len]=m[i][j];
}
}
private static void Table(int[][] m,int beg,int end) {
int size=end-beg+1;
if(size==1)
return;
int mid=size/2+beg-1;
Table(m,beg,mid);
Table(m,mid+1,end);
Copy(m,beg,mid,end);
}
private static void print(int[][] m,int size) throws IOException {
PrintWriter out=new PrintWriter(new FileWriter("C:\\Users\\Jack\\Desktop\\output.txt"));
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
out.print(m[i][j]);
}
out.println();
}
out.close();
}
public static void main(String[] args) throws IOException {
int[][] m=new int[100][100];
Scanner in=new Scanner(System.in);
int size=in.nextInt();
int k=(size%2==0?size:size+1);
for(int i=0;i<k;i++)
m[i][0]=i+1;
Table(m,0,size-1);
print(m,size);
}
}