#!/bin/python

import sys


def findMin(n, a, b):
    visited_row = [False] * n
    visited = []
    for i in range(n):
        visited.append(visited_row[:])
    queue = [(0, 0), (-1, -1)]
    flag = False
    minMoves = 0
    while len(queue) > 0:
        node_a, node_b = queue[0]
        queue.remove(queue[0])
        if node_a == -1 and node_b == -1:
            if len(queue) > 0:
                queue.append((-1, -1))
                minMoves += 1
            continue
        if node_a == n - 1 and node_b == n - 1:
            flag = True
            break
        if visited[node_a][node_b]:
            continue
        visited[node_a][node_b] = True
        if node_a + a < n and node_b + b < n and (not visited[node_a + a][node_b + b]):
            queue.append((node_a + a, node_b + b))
            #print "new path found 1",node_a, node_b, node_a + a, node_b + b
        if node_a + a < n and node_b - b >= 0 and (not visited[node_a + a][node_b - b]):
            queue.append((node_a + a, node_b - b))
            #print "new path found 2",node_a,node_b, node_a + a, node_b - b
        if node_a - a >= 0 and node_b + b < n and (not visited[node_a - a][node_b + b]):
            queue.append((node_a - a, node_b + b))
            #print "new path found 3",node_a,node_b, node_a - a, node_b + b
        if node_a - a >= 0 and node_b - b >= 0 and (not visited[node_a - a][node_b - b]):
            queue.append((node_a - a, node_b - b))
            #print "new path found 4",node_a,node_b, node_a - a, node_b - b
        if node_b + a < n and node_a + b < n and (not visited[node_a + b][node_b + a]):
            queue.append((node_a + b, node_b + a))
            #print "new path found 5",node_a,node_b, node_a + b, node_b + a
        if node_b + a < n and node_a - b >= 0 and (not visited[node_a - b][node_b + a]):
            queue.append((node_a - b, node_b + a))
            #print "new path found 6",node_a,node_b, node_a - b, node_b + a
        if node_b - a >= 0 and node_a + b < n and (not visited[node_a + b][node_b - a]):
            queue.append((node_a + b, node_b - a))
            #print "new path found 7",node_a,node_b, node_a + b, node_b - a
        if node_b - a >= 0 and node_a - b >= 0 and (not visited[node_a - b][node_b - a]):
            queue.append((node_a - b, node_b - a))
            #print "new path found 8",node_a,node_b, node_a - b, node_b - a
    if not flag:
        minMoves = -1
    return minMoves


n = int(raw_input().strip())
for a in range(1, n):
    for b in range(1, n):
        print findMin(n, a, b),
    print ""