#include <bits/stdc++.h>
using namespace std;
int main() {
  cout << fixed;
  cout.precision(16);
  int n;
  cin >> n;
  int v[n];
  v[0] = 1;
  vector<bool> used(1010, false);
  used[1] = true;
  for (int i = 1; i < n; i++) {
    int j = 1;
    for (j = 1; j < (int)used.size(); j++) {
      if (!used[j]) break;
    }
    if (j > 1000) {
      cerr << "NO";
      return 1;
    }
    used[j] = true;
    v[i] = j;
    for (int u = 0; u < i; u++)
      for (int w = 0; w < i; w++) {
        int t = v[u] + v[w] - j;
        if (t > 0 && t <= 1000) {
          used[t] = true;
        }
        t = v[u] + j - v[w];
        if (t > 0 && t <= 1000) {
          used[t] = true;
        }
      }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j) {
        cout << "0 ";
      } else {
        cout << v[i] + v[j] << " ";
      }
    }
    cout << endl;
  }
  return 0;
}
