#include using namespace std; float getDistance(int i_start, int j_start, int i_end, int j_end) { return sqrt(pow(i_end - i_start, 2) + pow(j_end - j_start, 2)); } void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { // Print the distance along with the sequence of moves. vector path(0); vector dists(6); int i_cur = i_start; int j_cur = j_start; float cur_dist = getDistance(i_cur, j_cur, i_end, j_end); while(!(cur_dist == 1 || cur_dist == 0)) { dists[0] = getDistance(i_cur - 2, j_cur - 1, i_end, j_end); // UL dists[1] = getDistance(i_cur - 2, j_cur + 1, i_end, j_end); // UR dists[2] = getDistance(i_cur, j_cur + 2, i_end, j_end); // R dists[3] = getDistance(i_cur + 2, j_cur + 1, i_end, j_end); // LR dists[4] = getDistance(i_cur + 2, j_cur - 1, i_end, j_end); // LL dists[5] = getDistance(i_cur, j_cur - 2, i_end, j_end); // L if(*min_element(dists.begin(), dists.end()) == dists[0] && i_cur - 2 >= 0 && j_cur - 1 >= 0) { // UL path.push_back("UL "); i_cur -= 2; j_cur -= 1; cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } else if (*min_element(dists.begin(), dists.end()) == dists[1] && i_cur - 2 >= 0 && j_cur + 1 >= 0) { // UR path.push_back("UR "); i_cur -= 2; j_cur += 1; cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } else if (*min_element(dists.begin(), dists.end()) == dists[2] && i_cur >= 0 && j_cur + 2 >= 0) { // R path.push_back("R "); j_cur += 2; cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } else if (*min_element(dists.begin(), dists.end()) == dists[3] && i_cur + 2 >= 0 && j_cur + 1 >= 0) { // LR path.push_back("LR "); i_cur += 2; j_cur += 1; cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } else if (*min_element(dists.begin(), dists.end()) == dists[4] && i_cur + 2 >= 0 && j_cur - 1 >= 0) { // LL path.push_back("LL "); i_cur += 2; j_cur -= 1; cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } else if (*min_element(dists.begin(), dists.end()) == dists[5] && i_cur >= 0 && j_cur - 2 >= 0) { // L path.push_back("L "); j_cur -= 2; cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } else { cout << "Error " << i_cur << " " << j_cur << endl; break; } cur_dist = getDistance(i_cur, j_cur, i_end, j_end); } if (cur_dist == 1) { cout << "Impossible" << endl; } else { cout << path.size() << endl; for (int i = 0; i < path.size(); i++) { cout << path[i]; } } } int main() { int n; cin >> n; int i_start; int j_start; int i_end; int j_end; cin >> i_start >> j_start >> i_end >> j_end; printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }