#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <string> #include <bitset> #include <cstdio> #include <limits> #include <vector> #include <climits> #include <cstring> #include <cstdlib> #include <fstream> #include <numeric> #include <sstream> #include <iostream> #include <algorithm> #include <unordered_map> using namespace std; int main(){ int n,arr[26][26],i,j; cin >> n; for(i=1;i<=n-1;i++) { for(j=1;j<=n-1;j++) { if(i==j) { if((n-1)%i==0) { arr[i][j] = (n-1)/i; } else { arr[i][j] = -1; } } else if((n-1)%(i+j) == 0) { arr[i][j] = 2*(n-1)/(i+j); } else if((n-1)%i==0 && j!=n-1 && i!=n-1) { arr[i][j] = 2*(n-1)/i; arr[j][i] = 2*(n-1)/i; } else if((n-1)%j==0 && i!=n-1 && j!=n-1) { arr[i][j] = 2*(n-1)/j; arr[j][i] = 2*(n-1)/j; } else if(i==n-1 && (n-1)%j==0) { if((n-1)%2==0) { arr[i][j] = 2*(n-1)/j; arr[j][i] = 2*(n-1)/j; } else { arr[i][j] = n-1; arr[j][i] = n-1; } } else if(j==n-1 && (n-1)%i==0) { if((n-1)%2==0) { arr[i][j] = 2*(n-1)/i; arr[j][i] = 2*(n-1)/i; } else { arr[i][j] = n-1; arr[j][i] = n-1; } } else { arr[i][j] = -1; arr[j][i] = -1; } } } for(i=1;i<=n-1;i++) { for(j=1;j<=n-1;j++) { cout<<arr[i][j]<<" "; } cout<<endl; } return 0; }