"""以下の文字列は本提出とは無関係です
#include "bits/stdc++.h"
using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)   FOR(i,0,n)
#define ALL(a)  (a).begin(),(a).end()
#define LL long long

LL mod = 10000000000;

void flush(vector<vector<int>> &w,int n){
  REP(i,n){
    REP(j,n){
      cerr<<w[i][j]<<" ";
    }
  }
}

vector<vector<int>> randgen(int n,random_device &rnd){
  vector<vector<int>> w;   
  std::mt19937 mt(rnd());
  REP(i,n){
    w.push_back(vector<int>());
    REP(j,n){
      w[i].push_back(0);
    }
  }
  REP(i,n){
    FOR(j,i+1,n){
      w[i][j] = max(1,(int)(mt()%(mod)));
      w[j][i]=w[i][j];
    }
  }
  return w;
}

bool verify(vector<vector<int>> &w,vector<int> &v,int n,map<LL,int> &mp){
  LL s=0;
  REP(i,n-1){
    s+=w[v[i]][v[i+1]];
  }
  //cerr<<"dbg"<<" "<<w[0][1]<<" "<<s<<" "<<mp[s]<<endl;
  if(mp[s]<2){
    mp[s]+=1;
    return true;
  }
  cerr<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;
  return false;
}

void sim(int n){
  bool bl=false;
  vector<vector<int>> w;
  std::random_device rnd;  
  while(true){
    w=randgen(n,rnd);
    vector<int> v;
    REP(i,n)v.push_back(i);
    map<LL,int> mp;
    do{
      bl=false;
      if(!verify(w,v,n,mp))break;
      bl=true;
    }while(next_permutation(ALL(v)));
    if(bl)break;
  }
  cerr<<n<<endl;
  flush(w,n);
  cerr<<endl;
}

int main(){
  FOR(i,9,11){
    sim(i);
  }
  return 0;
}
"""

n=int(input())
if n==2:
    s="0 1 1 0"
elif n==3:
    s="0 1721480094 1561257515 1721480094 0 1788104414 1561257515 1788104414 0"
elif n==4:
    s="0 581428381 1 1441998431 581428381 0 1179769892 1807120660 1 1179769892 0 1969338540 1441998431 1807120660 1969338540 0"
elif n==5:
    s="0 979387827 1640129545 1513641306 1242212853 979387827 0 1775042796 1938968663 1498895168 1640129545 1775042796 0 1534768716 1 1513641306 1938968663 1534768716 0 901944004 1242212853 1498895168 1 901944004 0"
elif n==6:
    s="0 1242580944 637927601 1707916372 1 180014641 1242580944 0 1869798653 1380915448 2064946787 1067301453 637927601 1869798653 0 605876109 2057384325 662280014 1707916372 1380915448 605876109 0 78900878 618698676 1 2064946787 2057384325 78900878 0 830526388 180014641 1067301453 662280014 618698676 830526388 0"
elif n==7:
    s="0 1 148644523 2063117940 1592801866 1934864855 1419215868 1 0 629816276 1857201569 1204080913 1423109061 484097724 148644523 629816276 0 191781800 201249482 1114461949 749092208 2063117940 1857201569 191781800 0 1543128881 369575089 1798114133 1592801866 1204080913 201249482 1543128881 0 858988702 180073842 1934864855 1423109061 1114461949 369575089 858988702 0 124515512 1419215868 484097724 749092208 1798114133 180073842 124515512 0"
elif n==8:
    s="0 156365563 262521118 1295552399 82036141 228684906 573621877 1728969520 156365563 0 965455011 37906999 1896588827 307706618 2033636325 1 262521118 965455011 0 1448141300 595308388 196534541 146633105 500792988 1295552399 37906999 1448141300 0 539873899 124629753 1624059301 1687603917 82036141 1896588827 595308388 539873899 0 1454529640 1059100826 678781536 228684906 307706618 196534541 124629753 1454529640 0 1418732528 94281078 573621877 2033636325 146633105 1624059301 1059100826 1418732528 0 170492231 1728969520 1 500792988 1687603917 678781536 94281078 170492231 0"
elif n==9:
    print("競プロってなんだよ（哲学）")
elif n==10:
    print("")
    
arr = s.split()
for i in range(n):
    print(" ".join(arr[i*n:(i+1)*n]))
