#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ldbl; const char* moves[] = {"UL", "UR", "R", "LR", "LL", "L"}; const int vi[] = {-2, -2, 0, 2, 2, 0}; const int vj[] = {-1, 1, 2, 1, -1, -2}; int d[202][202], mv[202][202]; void printans(const int i, const int j) { const int t = mv[i][j]; if (t >= 0) { printans(i - vi[t], j - vj[t]); printf("%s ", moves[t]); } } int main() { int n, i1, j1, i2, j2; scanf("%d %d %d %d %d", &n, &i1, &j1, &i2, &j2); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i][j] = -1; } } d[i1][j1] = 0; mv[i1][j1] = -1; queue> q; q.push({i1, j1}); bool f = false; while (!q.empty() && !f) { const int i = q.front().first; const int j = q.front().second; q.pop(); for (int t = 0; t < 6; t++) { const int ii = i + vi[t]; const int jj = j + vj[t]; if (ii >= 0 && ii < n && jj >= 0 && jj < n && d[ii][jj] < 0) { d[ii][jj] = d[i][j] + 1; mv[ii][jj] = t; if (ii == i2 && jj == j2) { f = true; break; } q.push({ii, jj}); } } } if (d[i2][j2] >= 0) { printf("%d\n", d[i2][j2]); printans(i2, j2); } else { puts("Impossible"); } return 0; }