#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma comment (linker, "/STACK:256000000") using namespace std; const int maxN = 250; int n, d[maxN][maxN]; pair < int, int > p[maxN][maxN]; int color[maxN][maxN]; int dx[] = {-2,-2, 0, 2, 2, 0}; int dy[] = {-1, 1, 2, 1,-1,-2}; string s[] = {"UL", "UR", "R", "LR", "LL", "L"}; bool valid(int x, int y) { return 0 <= x && x < n && 0 <= y && y < n; } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); scanf("%d", &n); int x1, y1, x2, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { d[i][j] = 1000000000; } } d[x2][y2] = 0; set < pair < int, pair < int, int > > > S; S.insert(make_pair(d[x2][y2], make_pair(x2, y2))); while (!S.empty()) { pair < int, int > e = S.begin()->second; S.erase(S.begin()); int x = e.first; int y = e.second; for (int i = 0; i < 6; ++i) { int nx = x + dx[i]; int ny = y + dy[i]; if (!valid(nx, ny)) { continue; } if (d[nx][ny] > d[x][y] + 1) { S.erase(make_pair(d[nx][ny], make_pair(nx, ny))); d[nx][ny] = d[x][y] + 1; p[nx][ny] = make_pair(x, y); color[nx][ny] = i; S.insert(make_pair(d[nx][ny], make_pair(nx, ny))); } } } if (d[x1][y1] == 1000000000) { printf("Impossible\n"); return 0; } vector < string > res; printf("%d\n", d[x1][y1]); int r = d[x1][y1]; while (x1 != x2 || y1 != y2) { for (int i = 0; i < 6; ++i) { int nx = x1 + dx[i]; int ny = y1 + dy[i]; if (!valid(nx, ny) || d[nx][ny] != r - 1) { continue; } res.push_back(s[i]); --r; x1 = nx; y1 = ny; break; } } for (int i = 0; i < res.size(); ++i) { printf("%s ", res[i].c_str()); } printf("\n"); return 0; }