#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> int cal_approach(int i,int j,int n); int main(){ int size_n; scanf("%d",&size_n); int **matrix; matrix = (int**)malloc(sizeof(int*)*(size_n)); for(int i=0;i<size_n;i++){ matrix[i] = (int*)malloc(sizeof(int)*(size_n)); for(int j=0;j<size_n;j++){ matrix[i][j] = -1; } } for(int i=1;i<=(size_n-1)/2;i++){ for(int j=i; j<size_n;j++){ if(i == j){ if((size_n-1)%(i) == 0){ matrix[i][i] = (size_n-1)/(i); } else matrix[i][i] = -1; } else{ matrix[i][j] = cal_approach(i,j,size_n-1); matrix[j][i] = matrix[i][j]; } } } matrix[size_n-1][size_n-1] = 1; for(int i=1;i<size_n;i++){ for(int j=1 ; j<size_n;j++){ printf("%d", matrix[i][j]); if(j==size_n-1){ break; } printf(" "); } if(i == size_n-1) break; printf("\n"); } return 0; } int cal_approach(int i,int j,int size_n){ int min = 999999999; int m; int n=1; if(size_n%(i+j) == 0 ){ return 2*(size_n/(i+j)); } else m = size_n / (i+j); if(m == 0){ m=1; for(;;m++){ if((m*(i+j) - size_n)%(j-i) == 0 ){ n = (m*(i+j) - size_n) / (j - i) ; if(n<0) n*=-1; return 2*(m+n); } } } else{ n = (size_n - (m*(i+j))) / (j - i); if(n<0) n*=-1; return 2*(m+n); } }