#!/bin/python3 import sys n = int(input().strip()) lst = [] for i in range(1, n): lst.append([]) for j in range(1, i): lst[i - 1].append(lst[j - 1][i - 1]) if (n - 1) % i == 0: lst[i - 1].append((n - 1) // i) else: lst[i - 1].append(-1) for j in range(i + 1, n): arr = [(i, j), (i, -j), (-i, j), (-i, -j), (j, i), (j, -i), (-j, i), (-j, -i)] maxdist = n * n v = [[0 for _ in range(n)] for _ in range(n)] q = [(n - 1, n - 1, 0)] v[n-1][n-1] = 1 possib = 1 steps = 0 while(q): curr = q.pop(0) steps = curr[2] if curr[0] == 0 and curr[1] == 0: lst[i - 1].append(steps) break for el in arr: k = el[0] + curr[0] l = el[1] + curr[1] if k >= 0 and k <= n - 1 and l >= 0 and l <= n - 1 and v[k][l] != 1: v[k][l] = 1 q.append((k, l, steps + 1)) if v[0][0] == 0: lst[i - 1].append(-1) for el in lst: print(*el)