#include #include #include using namespace std; #define move ahsudhasudh const int INF = (int)1e9; const int MAXN = 205; int dx[] = {-2, -2, 0, 2, 2, 0}; int dy[] = {-1, 1, 2, 1, -1, -2}; char move[][3] = {"UL", "UR", "R", "LR", "LL", "L"}; int d[MAXN][MAXN]; int is_in(int x, int y, int n) { return 0 <= x && x < n && 0 <= y && y < n; } int main(void) { int n; int sx, sy, ex, ey; queue > fila; scanf(" %d", &n); scanf(" %d %d %d %d", &sx, &sy, &ex, &ey); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i][j] = INF; } } d[ex][ey] = 0; fila.push(make_pair(ex, ey)); while(!fila.empty()) { int x = fila.front().first; int y = fila.front().second; fila.pop(); for (int i = 0; i < 6; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (is_in(nx, ny, n) && d[nx][ny] > 1 + d[x][y]) { d[nx][ny] = 1 + d[x][y]; fila.push(make_pair(nx, ny)); } } } if (d[sx][sy] < INF) { printf("%d\n", d[sx][sy]); while(!(sx == ex && sy == ey)) { for (int i = 0; i < 6; i++) { int nx = sx + dx[i]; int ny = sy + dy[i]; if (is_in(nx, ny, n) && d[sx][sy] == 1 + d[nx][ny]) { printf("%s", move[i]); if (!(nx == ex && ny == ey)) { printf(" "); } sx = nx; sy = ny; break; } } } printf("\n"); } else { printf("Impossible\n"); } return 0; }