#include using namespace std; unordered_map mStr = {{0, "UL"}, {1, "UR"}, {2, "R"}, {3, "LR"}, {4, "LL"}, {5, "L"}}; void print_ans(int move, vector& ans) { if (move == 0) { cout << "Impossible" << endl; return; } stringstream ss; for (int i=0;i<6;i++) { for (int j=0, n=ans[i]; j ans(6, 0); // UL, UR, R, LR, LL, L bool isValid = true; int di = i_end - i_start; int dj = j_end - j_start; int qi = abs(di)/2; int ri = abs(di)%2; int ri2= abs(di)%4; int qj = abs(dj)/2; int rj = abs(dj)%2; if ((di == 0 && dj == 0) || ri != 0 || abs(dj-qi)%2 != 0) { isValid = false; } else if (di == 0) { if (rj) isValid = false; else { move = qj; dj > 0 ? ans[2] = qj : ans[5] = qj; } } else if (dj == 0) { if (ri2) isValid = false; else { move = qi; for (int k=0;k 0) k%2 ? ans[4]++ : ans[3]++; else k%2 ? ans[1]++ : ans[0]++; } } } else if (abs(dj) >= qi) { int panning = abs(abs(dj)-qi)/2; move = qi + panning; if (di < 0 && dj < 0) { ans[0] = qi; ans[5] = panning; } else if (di < 0 && dj > 0) { ans[1] = qi; ans[2] = panning; } else if (di > 0 && dj > 0) { ans[3] = qi; ans[2] = panning; } else if (di > 0 && dj < 0) { ans[4] = qi; ans[5] = panning; } } else if (abs(dj) < qi) { move = qi; int move1 = (qi - abs(dj))/2; if (di < 0 && dj < 0) { ans[0] = qi - move1; ans[1] = move1; } else if (di < 0 && dj > 0) { ans[1] = qi - move1; ans[0] = move1; } else if (di > 0 && dj > 0) { ans[3] = qi - move1; ans[4] = move1; } else if (di > 0 && dj < 0) { ans[4] = qi - move1; ans[3] = move1; } } // UL, UR, R, LR, LL, L print_ans(move, ans); } 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; }