import java.io.*; import java.util.*; import javafx.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static class Move { public Move(int i, int j, String name) { this.i = i; this.j = j; this.name = name; } public int getI() { return i; } public void setI(int i) { this.i = i; } public int getJ() { return j; } public void setJ(int j) { this.j = j; } public String getName() { return name; } public void setName(String name) { this.name = name; } private int i; private int j; private String name; } static void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { // Print the distance along with the sequence of moves. if (i_start % 2 != i_end % 2) { System.out.println("Impossible"); return; } if (i_start % 4 == i_end % 4 && j_start % 2 != j_end % 2) { System.out.println("Impossible"); return; } if (i_start % 4 != i_end % 4 && j_start % 2 == j_end % 2) { System.out.println("Impossible"); return; } // possible to reach ArrayList moves = new ArrayList(); moves.add(new Move(-2, -1, "UL")); moves.add(new Move(-2, 1, "UR")); moves.add(new Move(0, 2, "R")); moves.add(new Move(2, 1, "LR")); moves.add(new Move(2, -1, "LL")); moves.add(new Move(0, -2, "L")); StringBuilder sb = new StringBuilder(); int i_curr = i_start; int j_curr = j_start; int movesCnt = 0; while (i_curr != i_end || j_curr != j_end) { int bestScore = -1; Move bestMove = null; for (Move v : moves) { if (isLegit(v.getI(), v.getJ(), i_curr, j_curr, i_end, j_end, n)) { int score = score(v.getI(), v.getJ(), i_curr, j_curr, i_end, j_end, n); if (score > bestScore) { bestMove = v; bestScore = score; } } } sb.append(bestMove.getName()); sb.append(" "); movesCnt++; i_curr += bestMove.getI(); j_curr += bestMove.getJ(); // System.out.println(sb.toString()); // System.out.println(i_curr + " " + j_curr); } System.out.println(movesCnt); System.out.println(sb.toString()); } private static boolean isLegit(int i, int j, int i_curr, int j_curr, int i_end, int j_end, int n) { return !(i+i_curr < 0 || i+i_curr >= n || j+j_curr < 0 || j+j_curr >= n); } private static int score(int i, int j, int i_curr, int j_curr, int i_end, int j_end, int n) { return ( Math.abs(i_end - i_curr) + Math.abs(j_end - j_curr) - Math.abs(i_end - i_curr - i) - Math.abs(j_end - j_curr - j)); } private static boolean isSameDirection(int x, int y){ return !(x * y < 0 || (x==0 && y != 0) || (y==0 && x != 0)); } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int i_start = in.nextInt(); int j_start = in.nextInt(); int i_end = in.nextInt(); int j_end = in.nextInt(); printShortestPath(n, i_start, j_start, i_end, j_end); in.close(); } }