import java.io.*; import java.math.*; import java.security.KeyStore.Entry; import java.util.*; class SPOJANDCC { @SuppressWarnings("rawtypes") static InputReader in; static PrintWriter out; static class Pair { int x, y; Pair(int a, int b) { x = a; y = b; } } static boolean pos(int x, int y, int n) { if (x >= 0 && y >= 0 && x < n && y < n) return true; return false; } static void solve() { int n = in.ni(); int arr[][] = new int[n][n]; String a[][] = new String[n][n]; int sx = in.ni(), sy = in.ni(), ex = in.ni(), ey = in.ni(); for (int i = 0; i < n; i++) Arrays.fill(arr[i], Integer.MAX_VALUE); arr[sy][sx] = 0; Queue q = new LinkedList(); Pair p = new Pair(sy, sx); q.add(p); int yy[][] = { { -1, -2 }, { 1, -2 }, { 2, 0 }, { 1, 2 }, { -1, 2 }, { -2, 0 } }; String h[] = { "UL ", "UR ", "R ", "LR ", "LL ", "L " }; while (!q.isEmpty()) { p = q.poll(); int x = p.x, y = p.y; //out.println(x + " " + y); for (int i = 0; i < yy.length; i++) { int nx = x + yy[i][0], ny = y + yy[i][1]; if (pos(nx, ny, n) && arr[nx][ny] > arr[x][y] + 1) { arr[nx][ny] = arr[x][y] + 1; a[nx][ny] = a[x][y] != null ? a[x][y] + h[i] : h[i]; q.add(new Pair(nx, ny)); } } } if (arr[ey][ex] == Integer.MAX_VALUE) out.println("Impossible"); else { out.println(arr[ey][ex]); out.println(a[ey][ex]); } } @SuppressWarnings("rawtypes") static void soln() { in = new InputReader(System.in); out = new PrintWriter(System.out); solve(); out.flush(); } static void debug(Object... o) { System.out.println(Arrays.deepToString(o)); } public static void main(String[] args) { new Thread(null, new Runnable() { public void run() { try { soln(); } catch (Exception e) { e.printStackTrace(); } } }, "1", 1 << 26).start(); } static class InputReader { private final InputStream stream; private final byte[] buf = new byte[8192]; private int curChar, snumChars; private SpaceCharFilter filter; public InputReader(InputStream stream) { this.stream = stream; } public int snext() { if (snumChars == -1) throw new InputMismatchException(); if (curChar >= snumChars) { curChar = 0; try { snumChars = stream.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if (snumChars <= 0) return -1; } return buf[curChar++]; } public int ni() { int c = snext(); while (isSpaceChar(c)) { c = snext(); } int sgn = 1; if (c == '-') { sgn = -1; c = snext(); } int res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = snext(); } while (!isSpaceChar(c)); return res * sgn; } public long nl() { int c = snext(); while (isSpaceChar(c)) { c = snext(); } int sgn = 1; if (c == '-') { sgn = -1; c = snext(); } long res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = snext(); } while (!isSpaceChar(c)); return res * sgn; } public int[] nextIntArray(int n) { int a[] = new int[n]; for (int i = 0; i < n; i++) { a[i] = ni(); } return a; } public long[] nextLongArray(int n) { long a[] = new long[n]; for (int i = 0; i < n; i++) { a[i] = nl(); } return a; } public String readString() { int c = snext(); while (isSpaceChar(c)) { c = snext(); } StringBuilder res = new StringBuilder(); do { res.appendCodePoint(c); c = snext(); } while (!isSpaceChar(c)); return res.toString(); } public String nextLine() { int c = snext(); while (isSpaceChar(c)) c = snext(); StringBuilder res = new StringBuilder(); do { res.appendCodePoint(c); c = snext(); } while (!isEndOfLine(c)); return res.toString(); } public boolean isSpaceChar(int c) { if (filter != null) return filter.isSpaceChar(c); return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } private boolean isEndOfLine(int c) { return c == '\n' || c == '\r' || c == -1; } public interface SpaceCharFilter { public boolean isSpaceChar(int ch); } } }