#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#define llint long long

using namespace std;

llint n;
llint a[15][15];
llint f[105];

int main(void)
{
	cin >> n;
	a[1][2] = a[2][1] = 1;
	
	f[0] = 0, f[1] = 1, f[2] = 2;
	for(int z = 3; z <= 10; z++){
		f[z] = f[z-1];
		while(1){
			vector<llint> vec;
			for(int i = 1; i <= z; i++){
				vec.push_back(f[i]);
				for(int j = 1; j <= z; j++){
					if(i < j) vec.push_back(f[i]+f[j]);
				}
			}
			sort(vec.begin(), vec.end());
			bool flag = true;
			for(int i = 1; i < vec.size(); i++){
				if(vec[i-1] == vec[i]) flag = false;
			}
			if(flag) break;
			f[z]++;
		}
	}
	
	for(int i = 3; i <= n; i++){
		llint perm[10], m = 0;
		for(int j = 1; j <= i-1; j++) perm[j] = j;
		do{
			llint sum = 0;
			for(int j = 1; j < i-1; j++) sum += a[perm[j]][perm[j+1]];
			m = max(m, sum);
		}while(next_permutation(perm+1, perm+i));
		
		for(int j = 1; j < i; j++){
			a[i][j] = a[j][i] = (m+1)*f[j];
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	
	return 0;
}