#include using namespace std; const char *names[] = {"UL", "UR", "R", "LR", "LL", "L"}; const int dir[][2] = { {-2, -1}, {-2, 1}, {0, 2}, {2, 1}, {2, -1}, {0, -2} }; vector> calc_dist(int size, int sx, int sy) { vector> ans(size, vector(size, size * size + 10)); ans[sx][sy] = 0; queue Q; Q.push(sx * size + sy); while (!Q.empty()) { sx = Q.front() / size; sy = Q.front() % size; Q.pop(); for (int d = 0; d < 6; d++) { int xx = sx + dir[d][0], yy = sy + dir[d][1]; if (xx < 0 || xx >= size || yy < 0 || yy >= size) continue; if (ans[xx][yy] < size*size + 10) continue; ans[xx][yy] = ans[sx][sy] + 1; Q.push(xx * size + yy); } } return ans; } int main() { int N; scanf("%d", &N); int sx, sy, tx, ty; scanf("%d %d %d %d", &sx, &sy, &tx, &ty); vector> dist = calc_dist(N, tx, ty); if (dist[sx][sy] == N * N + 10) { printf("Impossible\n"); } else { printf("%d\n", dist[sx][sy]); int times = dist[sx][sy]; while (times--) { // find direction for (int d = 0; d < 6; d++) { int xx = sx + dir[d][0], yy = sy + dir[d][1]; if (xx < 0 || xx >= N || yy < 0 || yy >= N) continue; if (dist[xx][yy] == dist[sx][sy] - 1) { // found it printf("%s ", names[d]); sx = xx; sy = yy; break; } } } } return 0; }