#include using namespace std; const int inf = 1e6; int n; int si, sj, ei, ej; int dp[505][505], p[505][505]; bool visited[505][505]; //tells if it is possible to visit a square bool check(int i, int j) { return i < n && j < n && i >= 0 && j >= 0 && !visited[i][j]; } //returns min cost to reach (ei, ej) from (i, j) int solve(int i, int j) { if (i == ei && j == ej) return 0; if (dp[i][j] != -1) return dp[i][j]; visited[i][j] = 1; int mv[6]; for (int k = 0; k < 6; ++k) mv[k] = inf; if (check(i - 2, j - 1)) mv[0] = 1 + solve(i - 2, j - 1); if (check(i - 2, j + 1)) mv[1] = 1 + solve(i - 2, j + 1); if (check(i, j + 2)) mv[2] = 1 + solve(i, j + 2); if (check(i + 2, j + 1)) mv[3] = 1 + solve(i + 2, j + 1); if (check(i + 2, j - 1)) mv[4] = 1 + solve(i + 2, j - 1); if (check(i, j - 2)) mv[5] = 1 + solve(i, j - 2); //cout << i << ", " << j << endl; //for (int k = 0; k < 6; ++k) cout << mv[k] << (k == 5 ? '\n' : ' '); visited[i][j] = 0; int mn_idx = 0; for (int k = 0; k < 6; ++k) { if (mv[mn_idx] > mv[k]) { mn_idx = k; } } p[i][j] = (mv[mn_idx] >= inf ? -1 : mn_idx); dp[i][j] = mv[mn_idx]; return mv[mn_idx]; } #define mp make_pair typedef pair ii; //constructs path for given answer vector construct_solution(int i, int j, int val) { string dir[] = {"UL", "UR", "R", "LR", "LL", "L"}; ii shift[] = {{-2, -1}, {-2, 1}, {0, 2}, {2, 1}, {2, -1}, {0, -2}}; int ti = i, tj = j; vector sol; for (int k = 0; k < val; ++k) { //cout << p[ti][tj] << ' ' << ti << ' ' << tj << ' ' << shift[p[ti][tj]].first << ' ' << shift[p[ti][tj]].second << endl; int idx = p[ti][tj]; sol.push_back(dir[idx]); ti += shift[idx].first; tj += shift[idx].second; } //cout << endl; return sol; } int main() { cin >> n; n *= 2; cin >> si >> sj >> ei >> ej; memset(dp, -1, sizeof(dp)); int ans = solve(si, sj); if (ans >= inf) cout << "Impossible" << endl; else { map pr = {{"UL", 0}, {"UR", 1}, {"R", 2}, {"LR", 3}, {"LL", 4}, {"L", 5}}; cout << ans << endl; vector path = construct_solution(si, sj, ans); sort(path.begin(), path.end(), [&](string a, string b) { return pr[a] < pr[b]; }); for (int i = 0; i < (int) path.size(); ++i) cout << path[i] << ' '; cout << endl; /*for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << p[i][j] << ' '; } cout << endl; }*/ } return 0; }