#include #include #include using namespace std; int main() { int n; cin >> n; int arr[n][n]; bool vis[n][n]; for(int i = 1; i < n; i++){ for(int j = 1; j < n; j++){ for(int k = 0; k < n; k++){ for(int d = 0; d < n; d++){ vis[k][d] = false; } } queue, int> > q; arr[i][j] = -1; vis[0][0] = true; q.push(make_pair(make_pair(0, 0), 0)); while(!q.empty()){ int r = q.front().first.first; int c = q.front().first.second; int dist = q.front().second; if(r == n - 1 && c == n - 1){ arr[i][j] = dist; break; } q.pop(); if(r + i < n && c + j < n && !vis[r + i][c + j]){ q.push(make_pair(make_pair(r + i, c + j), dist + 1)); vis[r + i][c + j] = true; } if(r + i < n && c - j >= 0 && !vis[r + i][c - j]){ q.push(make_pair(make_pair(r + i, c - j), dist + 1)); vis[r + i][c - j] = true; } if(r - i >= 0 && c + j < n && !vis[r - i][c + j]){ q.push(make_pair(make_pair(r - i, c + j), dist + 1)); vis[r - i][c + j] = true; } if(r - i >= 0 && c - j >= 0 && !vis[r - i][c - j]){ q.push(make_pair(make_pair(r - i, c - j), dist + 1)); vis[r - i][c - j] = true; } if(r + j < n && c + i < n && !vis[r + j][c + i]){ q.push(make_pair(make_pair(r + j, c + i), dist + 1)); vis[r + j][c + i] = true; } if(r + j < n && c - i >= 0 && !vis[r + j][c - i]){ q.push(make_pair(make_pair(r + j, c - i), dist + 1)); vis[r + j][c - i] = true; } if(r - j >= 0 && c + i < n && !vis[r - j][c + i]){ q.push(make_pair(make_pair(r - j, c + i), dist + 1)); vis[r - j][c + i] = true; } if(r - j >= 0 && c - i >= 0 && !vis[r - j][c - i]){ q.push(make_pair(make_pair(r - j, c - i), dist + 1)); vis[r - j][c - i] = true; } } } } for(int i = 1; i < n; i++){ for(int j = 1; j < n; j++){ cout << arr[i][j] << " "; } cout << endl; } return 0; }