#include <bits/stdc++.h>
using namespace std;
const int maxN = 1010;
int a[maxN][maxN], vis[maxN][maxN], n;
bool f(int r, int c) {
  if (c == n) {
    if (++r == n) {
      for (int i = 0; i < (n); ++i)
        for (int j = 0; j < (n); ++j)
          cout << a[i][j] << (j + 1 == n ? '\n' : ' ');
      return true;
    } else
      c = 0;
  }
  if (a[r][c] >= 0) return f(r, c + 1);
  for (int i = (1); i <= (n - 1); ++i) {
    if (!vis[r][i] && !vis[c][i]) {
      vis[r][i] = vis[c][i] = 1;
      a[r][c] = a[c][r] = i;
      if (f(r, c + 1)) return true;
      vis[r][i] = vis[c][i] = 0;
      a[r][c] = a[c][r] = -1;
    }
  }
  return false;
}
int main() {
  cin >> n;
  for (int i = 0; i < (n - 1); ++i)
    for (int j = 0; j < (n - 1); ++j) {
      if ((a[i][j] = (i + j) % (n - 1)) == 0) a[i][j] = n - 1;
    }
  for (int i = 0; i < (n); ++i) {
    a[i][n - 1] = a[n - 1][i] = a[i][i];
    a[i][i] = 0;
  }
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) cout << a[i][j] << (j + 1 == n ? '\n' : ' ');
  return 0;
}
