#!/bin/python3 import sys class Queue: def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def enqueue(self, item): self.items.insert(0,item) def dequeue(self): return self.items.pop() def size(self): return len(self.items) def check(n, x, y, visited): if(x >= 0 and x < n and y >= 0 and y < n and (x,y) not in visited): return True else: return False def printShortestPath(n, i_start, j_start, i_end, j_end): q = Queue() visited = set() all_moves = {} available_moves = { (-2, -1) : 'UL', (-2, +1) : 'UR', (0, +2) : 'R', (+2, +1) : 'LR', (+2, -1) : 'LL', (0, -2) : 'L', } shortest_moves = [] dirs = [ (-2, -1), (-2, +1), (0, +2), (+2, +1), (+2, -1), (0, -2) ] q.enqueue((i_start, j_start, 0)) while not q.isEmpty(): (x, y, pathLen) = q.dequeue() if(x == i_end and y == j_end): print(pathLen) previous = (x,y) while(previous != (i_start, j_start)): new_previous = all_moves[previous] dx = previous[0] - new_previous[0] dy = previous[1] - new_previous[1] shortest_moves.append(available_moves[(dx,dy)]) previous = new_previous print(" ".join(map(str, list(reversed(shortest_moves))))) return 0 for dx, dy in dirs: nx = x + dx ny = y + dy if(check(n, nx, ny, visited)): all_moves[(nx,ny)] = (x,y) q.enqueue((nx, ny, pathLen + 1)) visited.add((nx, ny)) return -1 if __name__ == "__main__": n = int(input().strip()) i_start, j_start, i_end, j_end = input().strip().split(' ') i_start, j_start, i_end, j_end = [int(i_start), int(j_start), int(i_end), int(j_end)] result = printShortestPath(n, i_start, j_start, i_end, j_end) if(result == -1): print('Impossible')