/*** 7 0 3 4 3 ***/ #include using namespace std; bool legit(int n, int i, int j) { return (0 <= i) && (i < n) && (0 <= j) && (j < n); } void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { int D[n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) D[i][j] = 300 * 300; vector>adj[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (legit(n, i - 1, j - 2)) adj[i][j].push_back(make_pair(i - 1, j - 2)); if (legit(n, i + 1, j - 2)) adj[i][j].push_back(make_pair(i + 1, j - 2)); if (legit(n, i + 2, j)) adj[i][j].push_back(make_pair(i + 2, j)); if (legit(n, i + 1, j + 2)) adj[i][j].push_back(make_pair(i + 1, j + 2)); if (legit(n, i - 1, j + 2)) adj[i][j].push_back(make_pair(i - 1, j + 2)); if (legit(n, i - 2, j)) adj[i][j].push_back(make_pair(i - 2, j)); } } pairC[n][n]; C[i_start][j_start] = make_pair(i_start, j_start); D[i_start][j_start] = 0; queue>X; X.push(make_pair(i_start, j_start)); while (!X.empty()) { paira = X.front(); X.pop(); for (pairb : adj[a.first][a.second]) { if (D[b.first][b.second] > D[a.first][a.second] + 1) { D[b.first][b.second] = D[a.first][a.second] + 1; C[b.first][b.second] = a; X.push(b); } } } if (D[i_end][j_end] > n * n) { cout << "Impossible"; return; } cout << D[i_end][j_end] << "\n"; vector>Y; Y.push_back(make_pair(i_end, j_end)); while (Y.back() != make_pair(i_start, j_start)) { Y.push_back(C[Y.back().first][Y.back().second]); } map>Z; Z[-2][0] = "R "; Z[2][0] = "L "; Z[-1][2] = "UR "; Z[1][2] = "UL "; Z[-1][-2] = "LR "; Z[1][-2] = "LL "; for (int i = Y.size() - 1; i >= 0; i--) cout << Z[Y[i].first - Y[i - 1].first][Y[i].second - Y[i - 1].second]; cout << endl; } int main() { int n; cin >> n; int i_start; int j_start; int i_end; int j_end; cin >> j_start >> i_start >> j_end >> i_end; printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }