import java.awt.Point; import java.io.PrintWriter; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class Solution { static PrintWriter out; static int dx[] = {-2, -2, 0, 2, 2, 0}; static int dy[] = {-1, 1, 2, 1, -1, -2}; static String[] dir = {"UL", "UR", "R", "LR", "LL", "L"}; static void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { int[][] dist = new int[n][n]; int[][] p = new int[n][n]; for (int i = 0; i < n; i++) Arrays.fill(dist[i], -1); dist[i_start][j_start] = 0; p[i_start][j_start] = -1; Queue q = new LinkedList<>(); q.add(new Point(i_start, j_start)); while(!q.isEmpty()) { Point cur = q.remove(); for (int i = 0; i < 6; i++) { int xx = cur.x + dx[i]; int yy = cur.y + dy[i]; if(xx >= 0 && xx < n && yy >= 0 && yy < n && dist[xx][yy] == -1) { p[xx][yy] = i; dist[xx][yy] = dist[cur.x][cur.y] + 1; q.add(new Point(xx, yy)); } } } if(dist[i_end][j_end] == -1) out.println("Impossible"); else { out.println(dist[i_end][j_end]); Stack stack = new Stack<>(); while(p[i_end][j_end] != -1) { stack.add(p[i_end][j_end]); int ii = i_end - dx[p[i_end][j_end]]; int jj = j_end - dy[p[i_end][j_end]]; i_end = ii; j_end = jj; } while(!stack.isEmpty()) out.print(dir[stack.pop()] + " "); out.println(); } } public static void main(String[] args) { Scanner in = new Scanner(System.in); out = new PrintWriter(System.out); 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(); out.close(); } }