using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { public enum MoveDir { UL, UR, R, LR, LL, L } static List moveList = new List(); private static int[] makeMove(int i_start, int j_start, MoveDir dir) { int[] result = new int[2]; switch(dir) { case MoveDir.UL: result[0] = i_start - 2; result[1] = j_start - 1; break; case MoveDir.UR: result[0] = i_start - 2; result[1] = j_start + 1; break; case MoveDir.R: result[0] = i_start; result[1] = j_start + 2; break; case MoveDir.LR: result[0] = i_start + 2; result[1] = j_start + 1; break; case MoveDir.LL: result[0] = i_start + 2; result[1] = j_start - 1; break; case MoveDir.L: result[0] = i_start; result[1] = j_start - 2; break; } return result; } static void getNextMove(int n, int i_start, int j_start, int i_end, int j_end) { MoveDir nextMove = MoveDir.UL; if(i_start == i_end) { if(((j_start < j_end && (j_end - j_start) % 2 == 0) || j_end - j_start > 3) && j_start < n-2) { nextMove = MoveDir.R; } else if(((j_start > j_end && (j_start - j_end) % 2 == 0) || j_start - j_end > 3) && j_start > 2) { nextMove = MoveDir.L; } else { if(j_start > j_end) { nextMove = MoveDir.UL; } else { nextMove = MoveDir.UR; } } } else if(i_start > i_end) { // go up if(j_start > j_end) { nextMove = MoveDir.UL; } else { nextMove = MoveDir.UR; } } else { // go down if(j_start > j_end) { nextMove = MoveDir.LL; } else { nextMove = MoveDir.LR; } } moveList.Add(nextMove); int[] newPos = makeMove(i_start,j_start,nextMove); if(newPos[0] != i_end || newPos[1] != j_end) { getNextMove(n, newPos[0], newPos[1], i_end, j_end); } } static void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { if((i_start % 2 == 0 && i_end % 2 != 0) || (i_start % 2 != 0 && i_end % 2 == 0)) { Console.WriteLine("Impossible"); } else { getNextMove(n, i_start, j_start, i_end, j_end); Console.WriteLine(moveList.Count); foreach(MoveDir dir in moveList) { Console.Write(dir + " "); } } } static void Main(String[] args) { int n = Convert.ToInt32(Console.ReadLine()); string[] tokens_i_start = Console.ReadLine().Split(' '); int i_start = Convert.ToInt32(tokens_i_start[0]); int j_start = Convert.ToInt32(tokens_i_start[1]); int i_end = Convert.ToInt32(tokens_i_start[2]); int j_end = Convert.ToInt32(tokens_i_start[3]); printShortestPath(n, i_start, j_start, i_end, j_end); } }