import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Solution { static int n = 10; static int min; static int max; static int a; static int b; static class Pair { final int l; final int r; Pair(int l, int r) { this.l = l; this.r = r; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Pair pair = (Pair) o; if (l != pair.l) return false; return r == pair.r; } @Override public int hashCode() { int result = l; result = 31 * result + r; return result; } } public static void main(String[] args) { Scanner in = new Scanner(System.in); n = in.nextInt(); int[][] grid = new int[n][n]; for (int i = 1; i < n; i++) { for (int j = 1; j < n; j++) { if (grid[i][j] == 0) { int x = 0; int y = 0; int t = -1; a = i; b = j; min = Integer.MAX_VALUE; max = 1; while(min == Integer.MAX_VALUE && max < n * 2){ ride(x, y, t, new HashSet<>()); max++; } if (min == Integer.MAX_VALUE) { min = -1; } grid[i][j] = grid[j][i] = min; } } } for (int i = 1; i < n; i++) { for (int j = 1; j < n; j++) { System.out.print(grid[i][j] + (j < n - 1 ? " " : "")); } System.out.println(); } } private static void ride(int x, int y, int t, Set path) { t++; if (t >= max) { return; } final int xPlusA = x + a; final int yPlusB = y + b; final int xMinA = x - a; final int yMinB = y - b; final int xPlusB = x + b; final int yPlusA = y + a; final int xMinB = x - b; final int yMinA = y - a; if (xPlusA < n && yPlusB < n) { rideAlong(t, path, xPlusA, yPlusB); } if (xMinA >= 0 && yPlusB < n) { rideAlong(t, path, xMinA, yPlusB); } if (xPlusA < n && yMinB >= 0) { rideAlong(t, path, xPlusA, yMinB); } if (xMinA >= 0 && yMinB >= 0) { rideAlong(t, path, xMinA, yMinB); } if (xPlusB < n && yPlusA < n) { rideAlong(t, path, xPlusB, yPlusA); } if (xMinB >= 0 && yPlusA < n) { rideAlong(t, path, xMinB, yPlusA); } if (xPlusB < n && yMinA >= 0) { rideAlong(t, path, xPlusB, yMinA); } if (xMinB >= 0 && yMinA >= 0) { rideAlong(t, path, xMinB, yMinA); } if (x == n - 1 && y == n - 1) { if (t < min) { min = t; } } } private static void rideAlong(int t, Set path, int x, int y) { final Pair pair = new Pair(x, y); if (!path.contains(pair)) { final HashSet newPath = new HashSet<>(path); newPath.add(pair); ride(x, y, t, newPath); } } }