#include using namespace std; int moves[] = {0, 1, 2, 3, 4, 5}; int myx0, myy0, myx1, myy1; int N; unsigned long long dp[201][201], par[201][201]; int MX = numeric_limits::max(); bool move(int &r, int &c, int m) { switch (m) { case 0: r -= 2; c -= 1; break; case 1: r -= 2; c += 1; break; case 2: c += 2; break; case 3: r += 2; c += 1; break; case 4: r += 2; c -= 1; break; case 5: c -= 2; break; } if (r < 0 || r >= N || c < 0 || c >= N) return false; return true; } void solve(int i, int j, int mv, int steps) { // cout << "Solving for " << i << " , " << j << endl; if (i < 0 || i > N || j < 0 || j > N) return; if (dp[i][j]>steps) { dp[i][j] = steps; par[i][j] = mv; // int mn = 1000000000; for (int t = 0; t < 6; ++t) { int x = i, y = j; if (move(x, y, moves[t])) { solve(x, y, t, steps+1); } // int mx = move(i, moves[t]); // int my = move(j, moves[t]); // int ans = solve(mx, my); // mn = min(mn, ans); } } // return mn; } void init() { for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) dp[i][j] = MX; } // UL, UR, R, LR, LL, L void print(int r, int c) { if (r == myx0 && c == myy0) return; string ans; switch (par[r][c]) { case 0: r += 2; c += 1; ans = "UL"; break; case 1: r += 2; c -= 1; ans = "UR"; break; case 2: c -= 2; ans = "R"; break; case 3: r -= 2; c -= 1; ans = "LR"; break; case 4: r -= 2; c += 1; ans = "LL"; break; case 5: c += 2; ans = "L"; break; } print(r, c); cout << ans << " "; } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ // int T; // cin >> T; // while (T--) { cin >> N; cin >> myx0 >> myy0 >> myx1 >> myy1; init(); solve(myx0, myy0, -1, 0); if (dp[myx1][myy1] == MX) { cout << "Impossible" << endl; } else { std::cout << dp[myx1][myy1] << std::endl; print(myx1, myy1); cout << endl; } // } return 0; }