#include #define l long long #define rep(i,a,b) for(l i =a; i < b; i++) using namespace std; l dp[205][205]; l prv[205][205]; string ch[6] = {"UL", "UR", "R", "LR", "LL", "L"}; int x[6] = {-1, 1, 2, 1, -1, -2}; int y[6] = {-2, -2, 0, 2, 2, 0}; bool vis[205][205]; l solve(int n, int i1, int j1, int i2, int j2, int p1, int p2) { if (vis[i1][j1]) return dp[i1][j1]; vis[i1][j1] = true; if (i1 == i2 && j1 == j2) { dp[i1][j1] = 0; prv[i1][j1] = -1; return 0; } l cur = 10000; rep(j,0,6) { l i = 5 - j; if (i1 - x[i] < 0 || i1 - x[i] >= n) continue; if (j1 - y[i] < 0 || j1 - y[i] >= n) continue; if (i1 - x[i] == p1 && j1 - y[i] == p2) continue; if (solve(n, i1 - x[i], j1 - y[i], i2, j2, i1, j1) + 1 < cur) { cur = solve(n, i1 - x[i], j1 - y[i], i2, j2, i1, j1) + 1; prv[i1][j1] = i; } } dp[i1][j1] = min(dp[i1][j1], cur); return cur; } void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { rep (i,0,n) rep(j,0,n) { dp[i][j] = 10000; vis[i][j] = false; } l k = solve(n, i_end, j_end, i_start, j_start, -1, -1); if (k == 10000) { cout << "Impossible\n"; return; } cout << k << "\n"; stack s; while (!((i_end == i_start) && (j_end == j_start))) { int p = prv[i_end][j_end]; s.push(ch[p]); i_end -= x[p]; j_end -= y[p]; } while (!s.empty()) { cout << s.top() << " "; s.pop(); } cout << "\n"; // Print the distance along with the sequence of moves. } 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; swap(i_start, j_start); swap(i_end, j_end); printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }