#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const long long md = 1234567891;
const long long bil = 1000000000;
const char aa = 'a';
const double eps = 1E-9;
const int mil = 1000000;
const int ths = 1000;
const int maxn = 1001;
const int dr[] = {0, -1, 0, 1};
const int dc[] = {1, 0, -1, 0};
const int mxx = 32;
const int inf = (int)1E9;
template <typename T>
void printV(vector<T>& v) {
  for (int i = 0; i < (int)(v.size()); i++) cout << v[i] << " ";
  cout << endl;
}
template <typename T>
void printVs(vector<vector<T> >& v) {
  for (int i = 0; i < (int)(v.size()); i++) printV(v[i]);
}
long long gcd(long long m, long long n) {
  if (m == 0 || n == 0) return m + n;
  return gcd(n, m % n);
}
const int mxn = 100001;
vector<int> getDigit(long long N, int bs) {
  vector<int> res;
  while (N) {
    res.push_back(N % bs);
    N /= bs;
  }
  {
    for (int i = 0; i < (int)(res.size() / 2); i++)
      swap(res[i], res[res.size() - i - 1]);
  };
  return res;
}
int main() {
  int n;
  cin >> n;
  int a[21] = {0, 1, 2};
  for (int i = (3); i < (int)(21); i++) {
    bool can = 0;
    for (int j = a[i - 1] + 1;; ++j) {
      can = 1;
      for (int k = 0; k < (int)(i); k++)
        for (int l = (k + 1); l < (int)(i); l++)
          for (int h = 0; h < (int)(i); h++)
            if (a[k] + a[l] == a[h] + j) can = 0;
      if (can) {
        a[i] = j;
        break;
      }
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(n); j++) {
      if (i == j)
        cout << 0 << " ";
      else
        cout << a[i] + a[j] << " ";
    }
    cout << "" << endl;
  }
}
