#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int n;
int m = 0;
int g[20][20], p[20], was[1001];
int go(int i, int j) {
  if (j == n) {
    return 1;
  }
  for (int k = 1; k <= 1000; k++)
    if (!was[k]) {
      g[j][i] = g[i][j] = k;
      int ok = 1;
      for (int a = 0; a < j && ok; a++)
        for (int b = a + 1; b < j && ok; b++)
          for (int c = b + 1; c < j && ok; c++) {
            int d = j;
            if (g[a][b] && g[c][d] && g[a][c] && g[b][d] &&
                g[a][b] + g[c][d] != g[a][c] + g[b][d])
              ok = 0;
            if (g[a][b] && g[c][d] && g[a][d] && g[b][c] &&
                g[a][b] + g[c][d] != g[a][d] + g[b][c])
              ok = 0;
            if (g[a][c] && g[b][d] && g[a][b] && g[c][d] &&
                g[a][c] + g[b][d] != g[a][b] + g[c][d])
              ok = 0;
            if (g[a][c] && g[b][d] && g[a][d] && g[b][c] &&
                g[a][c] + g[b][d] != g[a][d] + g[b][c])
              ok = 0;
            if (g[a][d] && g[b][c] && g[a][b] && g[c][d] &&
                g[a][d] + g[b][c] != g[a][b] + g[c][d])
              ok = 0;
            if (g[a][d] && g[b][c] && g[a][c] && g[b][d] &&
                g[a][d] + g[b][c] != g[a][c] + g[b][d])
              ok = 0;
          }
      if (ok) {
        was[k] = 1;
        int tmp;
        if (i + 1 == j)
          tmp = go(0, j + 1);
        else
          tmp = go(i + 1, j);
        if (tmp) return 1;
        was[k] = 0;
      }
      g[j][i] = g[i][j] = 0;
    }
  return 0;
}
int main() {
  scanf("%d", &n);
  go(0, 1);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) printf("%d ", g[i][j]);
    printf("\n");
  }
  return 0;
}
