#include using namespace std; int n, iStart, jStart, iEnd, jEnd; int b[222][222]; pair p[222][222]; string m[222][222]; int dr[6] = {-2, -2, 0, +2, +2, 0}; int dc[6] = {-1, +1, +2, +1, -1, -2}; string moves[6] = {"UL", "UR", "R", "LR", "LL", "L"}; void Print(int r, int c) { if (r == iStart && c == jStart) return; pair parent = p[r][c]; Print(parent.first, parent.second); printf("%s ", m[r][c].c_str()); } int main() { scanf("%d %d %d %d %d", &n, &iStart, &jStart, &iEnd, &jEnd); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { b[i][j] = -1; p[i][j] = {i, j}; } } bool ok = false; queue< pair > q; q.push({iStart, jStart}); b[iStart][jStart] = 0; p[iStart][jStart] = {iStart, jStart}; while (!q.empty()) { pair u = q.front(); q.pop(); int i = u.first; int j = u.second; if (i == iEnd && j == jEnd) { ok = true; break; } for (int ii = 0; ii < 6; ii++) { int r = i + dr[ii]; int c = j + dc[ii]; if (r >= 0 && r < n && c >= 0 && c < n && b[r][c] < 0) { b[r][c] = true; q.push({r, c}); p[r][c] = {i, j}; b[r][c] = b[i][j] + 1; m[r][c] = moves[ii]; } } } if (ok) { printf("%d\n", b[iEnd][jEnd]); Print(iEnd, jEnd); } else { puts("Impossible"); } return 0; }