#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 knightTrav(int x,int y,int a,int b,int n,vector<vector<int>> &board) { if(x<0 || x>=n || y<0 || y>=n) return -1; if(x==n-1 && y==n-1) return 0; board[x][y]=1; int i,j,cur; int min=-1; if(x+a>=0 && x+a<n && y+b>=0 && y+b<n && board[x+a][y+b]==0) { cur=knightTrav(x+a,y+b,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x+a>=0 && x+a<n && y-b>=0 && y-b<n && board[x+a][y-b]==0) { cur=knightTrav(x+a,y-b,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x-a>=0 && x-a<n && y+b>=0 && y+b<n && board[x-a][y+b]==0) { cur=knightTrav(x-a,y+b,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x-a>=0 && x-a<n && y-b>=0 && y-b<n && board[x-a][y-b]==0) { cur=knightTrav(x-a,y-b,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x+b>=0 && x+b<n && y+a>=0 && y+a<n && board[x+b][y+a]==0) { cur=knightTrav(x+b,y+a,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x+b>=0 && x+b<n && y-a>=0 && y-a<n && board[x+b][y-a]==0) { cur=knightTrav(x+b,y-a,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x-b>=0 && x-b<n && y+a>=0 && y+a<n && board[x-b][y+a]==0) { cur=knightTrav(x-b,y+a,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } if(x-b>=0 && x-b<n && y-a>=0 && y-a<n && board[x-b][y-a]==0) { cur=knightTrav(x-b,y-a,a,b,n,board); if(cur!=-1) { if(min==-1 || cur+1<min) min=cur+1; } } board[x][y]=0; return min; } void printBoard(vector<vector<int>> board,int n) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cout<<board[i][j]<<" "; } cout<<endl; } cout<<endl; } int main(){ int n; cin >> n; int i,j; vector<vector<int>> board(n,vector<int>(n,0)); for(i=1;i<n;i++) { for(j=1;j<n;j++) { if(i==j) { if((n-1)%i==0) cout<<(n-1)/i<<" "; else cout<<-1<<" "; } else cout<<knightTrav(0,0,i,j,n,board)<<" "; //printBoard(board,n); } cout<<endl; } //cout<<knightTrav(0,0,3,4,n,board)<<" "; return 0; }