#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n, mat[30][30]; map, int> m; void bt(int x, int y, int a, int b, int k) // br koraka je k { if (k < mat[x][y]) { mat[x][y] = k; if (x+a < n && y+b < n) bt(x+a, y+b, a, b, k+1); if (x+a < n && y-b >= 0) bt(x+a, y-b, a, b, k+1); if (x-a >= 0 && y+b < n) bt(x-a, y+b, a, b, k+1); if (x-a >= 0 && y-b >= 0) bt(x-a, y-b, a, b, k+1); if (x+b < n && y+a < n) bt(x+b, y+a, a, b, k+1); if (x+b < n && y-a >= 0) bt(x+b, y-a, a, b, k+1); if (x-b >= 0 && y+a < n) bt(x-b, y+a, a, b, k+1); if (x-b >= 0 && y-a >= 0) bt(x-b, y-a, a, b, k+1); } } int solve(int a, int b) { if (m[make_pair(b, a)] != 0) return m[make_pair(b, a)]; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) mat[i][j] = 10000; bt(0, 0, a, b, 0); return m[make_pair(a, b)] = (mat[n-1][n-1] != 10000 ? mat[n-1][n-1] : -1); } int main() { cin >> n; for (int i = 1; i < n; i++) { for (int j = 1; j < n; j++) { cout << solve(i, j) << " "; } cout << endl; } return 0; }