#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& check(vector<vector<int> >& board,int& n,int& x,int& y,int i,int j,int& moves){ // cout<<"x,y "<<x<<","<<y<<endl; board[x][y]=1; int k=0; if(board[n-1][n-1]!=1) { if(x+j==n-1&&y+i==n-1){k=1;} switch(k){ case 0: if(x+i<n&&y+j<n&&board[x+i][y+j]==0){ x=x+i;y=y+j; moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1){ return moves;} } else if(x-i>-1&&y+j<n&&board[x-i][y+j]==0){ x=x-i;y=y+j; //c2=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1) {return moves;} } else if(x+i<n&&y-j>-1&&board[x+i][y-j]==0){ x=x+i;y=y-j; //c3=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1){ return moves;} } else if(x-i>-1&&y-j>-1&&board[x-i][y-j]==0){ x=x-i;y=y-j; // c4=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1) {return moves;} } case 1:int temp=i;i=j;j=temp; if(x+i<n&&y+j<n&&board[x+i][y+j]==0){ x=x+i;y=y+j; //c5=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1) {return moves;} } else if(x-i>-1&&y+j<n&&board[x-i][y+j]==0){ x=x-i;y=y+j; // c6=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1) {return moves;} } else if(x+i<n&&y-j>-1&&board[x+i][y-j]==0){ x=x+i;y=y-j; //c7=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); if(board[n-1][n-1]==1) {return moves;} } else if(x-i>-1&&y-j>-1&&board[x-i][y-j]==0){ { x=x-i;y=y-j; //c8=check(board,n,x,y,i,j,++moves); moves=min(moves,check(board,n,x,y,i,j,++moves)); } if(board[n-1][n-1]==1) {return moves;} } else{ moves=32000;} } } // cout<<moves<<endl; return moves; } int main(){ int n; cin >> n; int i=3,j=3; for(int i=1;i<n;++i){ for(int j=1;j<n;++j){ vector<vector<int> > board(n,vector<int>(n,0)); int move=0,x=0,y=0; auto k=check(board,n,x,y,i,j,move); if(board[n-1][n-1]!=1){cout<<-1<<" ";}else{cout<<move<<" ";} } cout<<"\n"; } return 0; }