#!/bin/python
from collections import defaultdict
class Graph:
  def __init__(self):
    self.nodes = set()
    self.edges = defaultdict(list)
    self.distances = {}

  def add_node(self, value):
    self.nodes.add(value)

  def add_edge(self, from_node, to_node, distance):
    self.edges[from_node].append(to_node)
    self.edges[to_node].append(from_node)
    self.distances[(from_node, to_node)] = distance

def dijsktra(graph, initial):
  visited = {initial: 0}
  path = {}

  nodes = set(graph.nodes)

  while nodes: 
    min_node = None
    for node in nodes:
      if node in visited:
        if min_node is None:
          min_node = node
        elif visited[node] < visited[min_node]:
          min_node = node

    if min_node is None:
      break

    nodes.remove(min_node)
    current_weight = visited[min_node]

    for edge in graph.edges[min_node]:
      weight = current_weight + graph.distances[(min_node, edge)]
      if edge not in visited or weight < visited[edge]:
        visited[edge] = weight
        path[edge] = min_node

  return visited,path
import sys
def PossibleMove(n,a,b,i,j):
    if  (i+a<n)&(j+b<n)&((i+a)>=0)&(j+b>=0):
          return True
    else: return False
                    
       
      
    return Matrix
def MatrixOutput(n,Matrix):
    for i in range(n):
        for j in range(n):
            print Matrix[i][j],
            
        print
        
        
n = int(raw_input().strip())

for a in range(1,n):
    for b in range(1,n):
        
        Chessboard=Graph()
        k=0
        for i in range(n**2):
            Chessboard.add_node(k)
            k+=1
            
        for i in range(n):
            for j in range(n):
                if PossibleMove(n,i,j,a,b):Chessboard.add_edge(n*i+j,n*(i+a)+(j+b),1)
                if PossibleMove(n,i,j,-a,b):Chessboard.add_edge(n*i+j,n*(i-a)+(j+b),1)
                if PossibleMove(n,i,j,a,-b):Chessboard.add_edge(n*i+j,n*(i+a)+(j-b),1)
                if PossibleMove(n,i,j,-a,-b):Chessboard.add_edge(n*i+j,n*(i-a)+(j-b),1)
                if PossibleMove(n,i,j,b,a):Chessboard.add_edge(n*i+j,n*(i+b)+(j+a),1)
                if PossibleMove(n,i,j,-b,a):Chessboard.add_edge(n*i+j,n*(i-b)+(j+a),1)
                if PossibleMove(n,i,j,b,-a):Chessboard.add_edge(n*i+j,n*(i+b)+(j-a),1)
                if PossibleMove(n,i,j,-b,-a):Chessboard.add_edge(n*i+j,n*(i-b)+(j-a),1)

        visited, path=dijsktra(Chessboard,0)
        try:
            print visited[n**2-1],
        except KeyError:
            print -1,
        del Chessboard
    print
     
# your code goes here