#include using namespace std; // priority UL, UR, R, LR, LL, L. string get_move(int i_diff, int j_diff, int* i_curr, int* j_curr); void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { int i_diff = i_end - i_start; int j_diff = j_end - j_start; if (i_diff < 0) i_diff *= -1; if (j_diff < 0) j_diff *= -1; if (i_diff % 2 == 1 || (j_diff % 2 == 1 && i_diff % 4 == 0) || (j_diff % 2 == 0 && i_diff % 4 == 2)) { cout << "Impossible" << endl; return; } vector moves; int j_curr = j_start, i_curr = i_start; while (j_curr != j_end || i_curr != i_end) { int i_diff = i_curr - i_end; int j_diff = j_curr - j_end; string move = get_move(i_diff, j_diff, &i_curr, &j_curr); moves.push_back(move); } cout << moves.size() << endl; for (int i = 0; i < moves.size(); i++) cout << moves[i] << " "; cout << endl; } string get_move(int i_diff, int j_diff, int* i_curr, int* j_curr) { string move; if (i_diff > 0) { if (j_diff > 0) { move = "UL"; *j_curr -= 1; } else { move = "UR"; *j_curr += 1; } *i_curr -= 2; } else { if (j_diff <= 0) { if (j_diff <= i_diff) { move = "R"; *j_curr += 2; } else { move = "LR"; *i_curr += 2; *j_curr += 1; } } else { if (i_diff < 0) { move = "LL"; *i_curr += 2; *j_curr -= 1; } else { move = "L"; *j_curr -= 2; } } } return move; } 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; }