import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        // your code goes here
        int[][] A = new int[n][n];
        int[][] v = new int[n][n];
        boolean[][] visited = new boolean[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++)
            visited[i][j] = false;
        }
        for(int i=1;i<=n-1;i++){
            for(int j=1;j<=n-1;j++){
                v[i][j] = KnightL(0,0,i,j,A,visited);
                System.out.println(v[i][j]);
            }
            
            for(int p=0;p<n;p++){
                for(int j=0;j<n;j++)
                    visited[p][j] = false;
            }
        
        }
        
        for(int i=1;i<=n-1;i++){
            for(int j=1;j<=n-1;j++){
                System.out.print(v[i][j]+" ");
            }
            System.out.println();
        }
    }
    
    public static int KnightL(int start , int end , int i , int j , int[][] A , boolean[][] visited){
        
        
        if(start == A.length-1&&end == A.length-1){
            return 1;
        }
        
        if(start>=A.length){
            return -1;
        }
        if(start<0){
            return -1;
        }
        if(end<0){
            return -1;
        }
        if(end>=A.length){
            return -1;
        }
        if(visited[start][end] == true){
            return -1;
        }
        visited[start][end] = true;
        
        int count1 = KnightL(start+i,end+j,i,j,A,visited)+1;
        int count2 = KnightL(start-i,end-j,i,j,A,visited)+1;
        int count3 = KnightL(start+i,end-j,i,j,A,visited)+1;
        int count4 = KnightL(start-i,end+j,i,j,A,visited)+1;
            
        return Math.min(Math.min(count1,count2),Math.min(count3 , count4));
        
    }
}