#include using namespace std; #define FOR(i, a, b) for (int i = a; i <= b; i++) #define FOD(i, a, b) for (int i = a; i >= b; i--) #define REP(i, a, b) for (int i = a; i < b; i++) #define DEBUG(X) cout << #X << " = " << X << endl; #define PR(A, a, b) {cout << #A << " = "; FOR(_, a, b) cout << A[_] << " "; cout << endl;} #define fs first #define sc second typedef pair II; const int N = 210; int n; int a, b, c, d; int dist[N][N]; string trace[N][N]; int dx[6] = {-2, -2, +0, +2, +2, +0}; int dy[6] = {-1, +1, +2, +1, -1, -2}; string ch[6] = {" UL", " UR", " R", " LR", " LL", " L"}; bool Inside(int x, int y) { return 0 <= x && x < n && 0 <= y && y < n; } void BFS() { queue Q; Q.push(II(a, b)); dist[a][b] = 1; trace[a][b] = ""; while (Q.size()) { int u = Q.front().fs; int v = Q.front().sc; Q.pop(); if (u == c && v == d) break; REP(i, 0, 6) { int x = u + dx[i]; int y = v + dy[i]; if (!Inside(x, y)) continue; if (dist[x][y]) continue; Q.push(II(x, y)); dist[x][y] = dist[u][v] + 1; trace[x][y] = trace[u][v] + ch[i]; } } if (dist[c][d] == 0) { printf("Impossible"); return; } printf("%d\n", dist[c][d] - 1); cout << trace[c][d].erase(0, 1); } int main() { #ifdef LOCAL freopen("input.inp", "r", stdin); freopen("output.out", "w", stdout); #endif scanf("%d", &n); scanf("%d%d%d%d", &a, &b, &c, &d); BFS(); return 0; }