#include #include #include const int INF = 0x3f3f3f3f; using namespace std; const int MAXN = 210; int dist[MAXN][MAXN]; struct pt { int r, c; } from[MAXN][MAXN], Q[MAXN * MAXN]; int dir[MAXN][MAXN]; int N, SR, SC, TR, TC; const int dr[6] = {-2, -2, 0, 2, 2, 0}; const int dc[6] = {-1, 1, 2, 1, -1, -2}; const char str[][3] = {"UL", "UR", "R", "LR", "LL", "L"}; int stk[MAXN * MAXN], nstk; int main() { int i, r, c; scanf("%d%d%d%d%d", &N, &SR, &SC, &TR, &TC); memset(dist, 0x3f, sizeof(dist)); int qH = 0, qT = 0; Q[qT++] = (pt){SR, SC}; dist[SR][SC] = 0; while(qH < qT) { pt u = Q[qH++]; for(i = 0; i < 6; i++) { r = u.r + dr[i], c = u.c + dc[i]; if(r >= 0 && c >= 0 && r < N && c < N && dist[r][c] == INF) { dist[r][c] = dist[u.r][u.c] + 1; from[r][c] = u; dir[r][c] = i; Q[qT++] = (pt){r, c}; } } } if(dist[TR][TC] == INF) printf("Impossible"); else { r = TR, c = TC; nstk = 0; while(r != SR || c != SC) { stk[nstk++] = dir[r][c]; pt pf = from[r][c]; r = pf.r, c = pf.c; } printf("%d\n", nstk); for(i = nstk - 1; i >= 0; i--) printf("%s ", str[stk[i]]); } }