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[][] results = new int[n-1][n-1]; for(int i = 1; i < n; i++){ //decres i and j when entering for(int j = 1; j < n; j++){ int[][] T = new int[n][n]; Queue q = new LinkedList(); q.add(new Tupel(0,0)); while(!q.isEmpty()){ Tupel t = q.remove(); if(t.x == 0 && t.y == 0){ T[0][0] = 1; } if(t.x-i >= 0 && t.y-j >= 0 && T[t.x-i][t.y-j] == 0){ T[t.x-i][t.y-j] = T[t.x][t.y]+1; q.add(new Tupel(t.x-i, t.y-j)); } if(t.x-j >= 0 && t.y-i >= 0 && T[t.x-j][t.y-i] == 0){ T[t.x-j][t.y-i] = T[t.x][t.y]+1; q.add(new Tupel(t.x-j, t.y-i)); } if(t.x-i >= 0 && t.y+j < n && T[t.x-i][t.y+j] == 0){ T[t.x-i][t.y+j] = T[t.x][t.y]+1; q.add(new Tupel(t.x-i, t.y+j)); } if(t.x-j >= 0 && t.y+i < n && T[t.x-j][t.y+i] == 0){ T[t.x-j][t.y+i] = T[t.x][t.y]+1; q.add(new Tupel(t.x-j, t.y+i)); } if(t.x+i < n && t.y+j < n && T[t.x+i][t.y+j] == 0){ T[t.x+i][t.y+j] = T[t.x][t.y]+1; if(t.x+i == n-1 && t.y+j == n-1){ break; } q.add(new Tupel(t.x+i, t.y+j)); } if(t.x+j < n && t.y+i < n && T[t.x+j][t.y+i] == 0){ T[t.x+j][t.y+i] = T[t.x][t.y]+1; if(t.x+i == n-1 && t.y+j == n-1){ break; } q.add(new Tupel(t.x+j, t.y+i)); } if(t.x+i < n && t.y-j >= 0 && T[t.x+i][t.y-j] == 0){ T[t.x+i][t.y-j] = T[t.x][t.y]+1; q.add(new Tupel(t.x+i, t.y-j)); } if(t.x+j < n && t.y-i >= 0 && T[t.x+j][t.y-i] == 0){ T[t.x+j][t.y-i] = T[t.x][t.y]+1; q.add(new Tupel(t.x+j, t.y-i)); } } results[i-1][j-1] = T[n-1][n-1]-1; } } for(int i = 0; i < n-1; i++){ for(int j = 0; j < n-1; j++){ System.out.print(results[i][j] + " "); } System.out.println(); } } } class Tupel{ int x; int y; public Tupel(int x, int y){ this.x = x; this.y = y; } }