#include <bits/stdc++.h>
inline void in(int &MAGNUS) { scanf("%d", &MAGNUS); }
inline void out(int MAGNUS) { printf("%d\n", MAGNUS); }
inline void in(int &MAGNUS, int &CLAR) { scanf("%d%d", &MAGNUS, &CLAR); }
inline void out(int MAGNUS, int CLAR) { printf("%d %d\n", MAGNUS, CLAR); }
inline void inl(long long &LIV) { scanf("%lld", &LIV); }
inline void inl(long long &LIV, long long &MART) {
  scanf("%lld%lld", &LIV, &MART);
}
inline void outl(long long LIV) { printf("%lld\n", LIV); }
inline void outl(long long LIV, long long MART) {
  printf("%lld %lld\n", LIV, MART);
}
using namespace std;
bool udah[1005];
int v[25];
int main() {
  int N;
  in(N);
  for (int i = 1; i <= 3; i++) v[i] = i;
  for (int i = 4; i <= N; i++) {
    memset(udah, 0, sizeof(udah));
    for (int j = 1; j <= i; j++) udah[v[j]] = 1;
    for (int j = 1; j <= i; j++) {
      for (int k = 1; k <= i; k++) {
        for (int l = 1; l <= i; l++) {
          if (j == k || j == l || k == l) continue;
          if (v[j] + v[k] - v[l] > 0) {
            udah[v[j] + v[k] - v[l]] = 1;
          }
        }
      }
    }
    for (int j = 1; j <= 1000; j++) {
      if (!udah[j]) {
        v[i] = j;
        break;
      }
    }
  }
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
      if (i == j)
        printf("0 ");
      else
        printf("%d ", v[i] + v[j]);
    }
    cout << endl;
  }
  return 0;
}
