#include <bits/stdc++.h>
using namespace std;
const int MaxN = 20, MaxL = 1003, NA = -1, MaxC = 0x3F3F3F3F;
int a[MaxN + 1];
bool b[MaxL];
int n;
int main(void) {
  int i, j, k;
  memset(b, 0, sizeof(b));
  a[1] = 1;
  a[2] = 2;
  b[1] = b[2] = b[3] = true;
  j = 3;
  for (i = 3; i <= MaxN; i++) {
    for (j++;; j++) {
      if (b[j]) continue;
      for (k = 1; k < i; k++)
        if (b[a[k] + j]) break;
      if (k == i) break;
    }
    a[i] = j;
    b[j] = true;
    for (k = 1; k < i; k++) {
      assert(!b[a[k] + j]);
      b[a[k] + j] = true;
    }
  }
  while (scanf(" %d", &n) != EOF) {
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++)
        printf("%d%c", i == j ? 0 : a[i] + a[j], j < n ? ' ' : '\n');
  }
  return 0;
}
