#!/bin/python3 import sys def outside(x, n): if x['x'] < 0 or x['x'] >= n or x['y'] < 0 or x['y'] >=n: return True else: return False def printShortestPath(n, i_start, j_start, i_end, j_end): # Print the distance along with the sequence of moves. pos = {'x':i_start,'y':j_start} des = {'x':i_end,'y':j_end} nmov = 0 direc = [] for i in range(n): newpos = { 'UL':{'x':pos['x']-2, 'y':pos['y']-1, 'k':0}, 'UR':{'x':pos['x']-2, 'y':pos['y']+1, 'k':1}, 'R':{'x':pos['x'], 'y':pos['y']+2, 'k':2}, 'LR':{'x':pos['x']+2, 'y':pos['y']+1, 'k':3}, 'LL':{'x':pos['x']+2, 'y':pos['y']-1, 'k':4}, 'L':{'x':pos['x'], 'y':pos['y']-2, 'k':5} } for mov in newpos: newpos[mov]['d'] = abs(newpos[mov]['x']-des['x']) + abs(newpos[mov]['y']-des['y']) mov = min([(x[1]['d'],x[1]['k'],x[0]) for x in newpos.items() if not outside(x[1],n)])[2] if outside(newpos[mov],n) or min(newpos.items(), key=lambda x: (x[1]['d'],x[1]['k']))[1]['d'] == 1: print('Impossible') break pos['x'] = newpos[mov]['x'] pos['y'] = newpos[mov]['y'] direc.append((mov, newpos[mov]['k'])) nmov = nmov + 1 if pos['x'] == des['x'] and pos['y'] == des['y']: print(nmov) print(' '.join([x[0] for x in sorted(direc ,key=lambda x: x[1])])) break 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)] printShortestPath(n, i_start, j_start, i_end, j_end)