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)); } }