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: import sys
  
  sys.setrecursionlimit(10**6)
  int1 = lambda x: int(x) - 1
  p2D = lambda x: print(*x, sep="\n")
  
  
  def II():
      return int(sys.stdin.readline())
  
  
  def MI():
      return map(int, sys.stdin.readline().split())
  
  
  def LI():
      return list(map(int, sys.stdin.readline().split()))
  
  
  def LLI(rows_number):
      return [LI() for _ in range(rows_number)]
  
  
  def SI():
      return sys.stdin.readline()[:-1]
  
  
  def main():
      n = II()
      base = [1, 2]
      for i in range(7):
          base.append(base[-1] + base[-2])
      mx = 0
      ans = [[0] * n for _ in range(n)]
      for i in range(n):
          last = 0
          for j in range(i):
              ans[i][j] = ans[j][i] = base[j] * (mx + 1)
              last = ans[i][j]
          mx += last
      for row in ans:
          print(*row)
  
  
  main()
  
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."}]