output_description: Print a set of the lengths of the roads that meets the objective, in the
  following format:
  
      
      
      w_{1, 1} \ w_{1, 2} \ w_{1, 3} \ ... \ w_{1, N}
      w_{2, 1} \ w_{2, 2} \ w_{2, 3} \ ... \ w_{2, N}
        :  :     :
      w_{N, 1} \ w_{N, 2} \ w_{N, 3} \ ... \ w_{N, N}
      
  
  where w_{i, j} is the length of the road connecting Town i and Town j, which
  must satisfy the following conditions:
  
    * w_{i, i} = 0
    * w_{i, j} = w_{j, i} \ (i \neq j)
    * 1 \leq w_{i, j} \leq 10^{11} \ (i \neq j)
  
  If there are multiple sets of lengths of the roads that meet the objective,
  any of them will be accepted.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
attempt: def print_map(m, n):
      for i in range(n):
          for j in range(n):
              if j == 0:
                  h = ""
              else:
                  h = " "
              print(h + str(m[i][j]), end="")
          print()
  
  
  def calc_distance(r, m, n):
      p = r[0]
      total_dist = 0
      for i in range(1, n):
          np = r[i]
          dist = m[p][np]
          total_dist += dist
          p = np
      return total_dist
  
  
  N = int(input())
  Map = [[0 for i in range(N)] for j in range(N)]
  # print_map(Map,N)
  dist = 1
  for i in range(N):
      for j in range(N):
          if i == j:
              continue
          if Map[i][j] != 0 or Map[j][i] != 0:
              continue
          Map[i][j] = dist
          Map[j][i] = dist
          # print(i,j,dist)
          dist += 1
  # print_map(Map,N)
  
  route_seed = [i for i in range(N)]
  import itertools
  
  route = list(itertools.permutations(route_seed))
  for i in range(len(route)):
      dist_list = []
      # print(route[i])
      r = route[i]
      dist = calc_distance(r, Map, N)
      if dist in dist_list:
          print("same distance")
          break
      dist_list.append(dist)
  print_map(Map, N)
  
problem_description: Statement
  
  Diverta City is a new city consisting of N towns numbered 1, 2, ..., N.
  
  The mayor Ringo is planning to connect every pair of two different towns with
  a bidirectional road. The length of each road is undecided.
  
  A _Hamiltonian path_ is a path that starts at one of the towns and visits each
  of the other towns exactly once. The reversal of a Hamiltonian path is
  considered the same as the original Hamiltonian path.
  
  There are N! / 2 Hamiltonian paths. Ringo wants all these paths to have
  distinct total lengths (the sum of the lengths of the roads on a path), to
  make the city diverse.
  
  Find one such set of the lengths of the roads, under the following conditions:
  
    * The length of each road must be a positive integer.
    * The maximum total length of a Hamiltonian path must be at most 10^{11}.
samples: [{"input": "3", "output": "0 6 15\n    6 0 21\n    15 21 0\n    \n\nThere are three Hamiltonian paths. The total lengths of these paths are as\nfollows:\n\n  * 1 \u2192 2 \u2192 3: The total length is 6 + 21 = 27.\n  * 1 \u2192 3 \u2192 2: The total length is 15 + 21 = 36.\n  * 2 \u2192 1 \u2192 3: The total length is 6 + 15 = 21.\n\nThey are distinct, so the objective is met.\n\n* * *"}, {"input": "4", "output": "0 111 157 193\n    111 0 224 239\n    157 224 0 258\n    193 239 258 0\n    \n\nThere are 12 Hamiltonian paths, with distinct total lengths."}]