/// UpperLeft, UpperRight, Right, LowerRight, LowerLeft, Left #include #define pii pair #define ff first #define ss second #define mp make_pair using namespace std; int ddr[] = {-2, -2, 0, +2, +2, -0}; int ddc[] = {-1, +1, 2, +1, -1, -2}; string ss[] = {"UL", "UR", "R", "LR", "LL", "L" }; int n, sr,sc, dr,dc, grid[220][220], mv[220][220]; void f(int r, int c) { if(r == sr && c == sc) return; int x = mv[r][c]; f( r-ddr[x], c-ddc[x] ); if(r == dr && c == dc) cout << ss[x] << endl; else cout << ss[x] << " " ; } int main() { scanf("%d", &n); scanf("%d %d %d %d", &sr, &sc, &dr, &dc); memset(grid, -1, sizeof grid); grid[sr][sc] = 0; queueq; q.push(mp(sr,sc)); while(!q.empty()) { pii cur = q.front(); q.pop(); int ur = cur.ff, uc = cur.ss; // cout << ur << ' ' << uc << ' ' << grid[ur][uc] << endl; getchar(); if(ur == dr && uc == dc) { break; } for(int i=0; i<6; i++) { int vr = ur+ddr[i], vc = uc+ddc[i]; if(vr < 0 || vr >= n || vc < 0 || vc >= n || grid[vr][vc] != -1) continue; grid[vr][vc] = 1+grid[ur][uc]; mv[vr][vc] = i; q.push(mp(vr,vc)); } } if(grid[dr][dc] == -1) { printf("Impossible\n"); } else { printf("%d\n", grid[dr][dc]); f(dr,dc); // printf("\n"); } return 0; }