#include #include using namespace std; typedef pair ii; const int kx[6] = {-2, -2, 0, 2, 2, 0}; const int ky[6] = {-1, 1, 2, 1, -1, -2}; const int MAX = 210; int N; int xstart, ystart, xend, yend; queue Q; int d[MAX][MAX], tr[MAX][MAX]; int p[MAX * MAX]; void trace(int u, int v) { int cnt = 0; while (1) { if (u == xstart && v == ystart) break; cnt++; int k = tr[u][v]; p[cnt] = k; u -= kx[k]; v -= ky[k]; } for (int i = cnt; i > 0; i--) { switch (p[i]) { case 0 : printf("UL "); break; case 1 : printf("UR "); break; case 2 : printf("R "); break; case 3 : printf("LR "); break; case 4 : printf("LL "); break; case 5 : printf("L "); break; } } } void Process() { scanf("%d", &N); scanf("%d %d %d %d", &xstart, &ystart, &xend, ¥d); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { d[i][j] = 0; tr[i][j] = -1; } Q.push(ii(xstart, ystart)); d[xstart][ystart] = 1; while (!Q.empty()) { ii cur = Q.front(); Q.pop(); int u = cur.first; int v = cur.second; if (u == xend && v == yend) { printf("%d\n", d[u][v] - 1); trace(u, v); return; } for (int i = 0; i < 6; i++) { int ux = u + kx[i]; int vy = v + ky[i]; if (ux >= 0 && ux < N && vy >= 0 && vy < N) { if (!d[ux][vy]) { d[ux][vy] = d[u][v] + 1; tr[ux][vy] = i; Q.push(ii(ux, vy)); } } } } printf("Impossible"); } int main() { Process(); return 0; }