using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; class Solution { 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) { Console.WriteLine("Impossible"); return; } // Order of priority: UL, UR, R, LR, LL, L. int steps = 0; var result = new StringBuilder(); int move_left = j_start - j_end; int move_up_times = (i_start - i_end)/2; //Console.WriteLine($"{move_left}, {move_up_times}"); if(move_up_times != 0){ int incg = Math.Abs(move_left) - move_up_times; if(incg < 0 || incg % 2 != 0){ Console.WriteLine("Impossible"); return; } int tmp = Math.Abs(move_up_times); for(int i = 0; i 1){ result.Append(move_up_times > 0 ? "UL " : "LL "); steps++; move_left-=1; move_up_times -= Math.Sign(move_up_times); } else if(move_left < -1){ result.Append(move_up_times > 0 ? "UR " : "LR "); steps++; move_left+=1; move_up_times -= Math.Sign(move_up_times); } else if(move_left == 1){ result.AppendLine(move_up_times > 0 ? "UL" : "LL"); steps++; Console.WriteLine(steps); Console.Write(result.ToString()); return; } else if(move_left == -1){ result.AppendLine(move_up_times > 0 ? "UR" : "LR"); steps++; Console.WriteLine(steps); Console.Write(result.ToString()); return; } } if(move_left > 0){ while(move_left > 3){ move_left -=2; result.Append("L "); steps++; } result.AppendLine("L"); steps++; Console.WriteLine(steps); Console.Write(result.ToString()); } else if(move_left < 0){ while(move_left < -3){ move_left += 2; result.Append("R "); steps++; } result.AppendLine("R"); steps++; Console.WriteLine(steps); Console.Write(result.ToString()); } else{ int change = Math.Abs(move_up_times); for(int i = 0; i < change/2;i++){ result.Append(move_up_times > 0 ? "UL " : "LR "); steps++; } for(int i=0;i 0 ? "UR " : "LL "); steps++; } if(change % 2 == 0){ result.AppendLine(move_up_times > 0 ? "UR" : "LL"); steps++; Console.WriteLine(steps); Console.Write(result.ToString()); } else{ result.AppendLine(move_up_times > 0 ? "R" : "L"); steps++; Console.WriteLine(steps); Console.Write(result.ToString()); } } } } 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); } }