using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace _2D_Array___DS { class Program { static void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { var stringValue = ""; var count = 0; if ((i_end - i_start) % 2 != 0) { Console.WriteLine("Impossible"); } else { if ((i_end - i_start) > 0) { var uptimes = Math.Abs(i_end - i_start) / 2; if (j_start == j_end && uptimes % 2 != 0) { Console.WriteLine("Impossible"); } else if (j_start == j_end && uptimes % 2 == 0) { var lftTimes = uptimes / 2; for (int i = 0; i < lftTimes; i++) { count++; count++; stringValue += stringValue.Equals(string.Empty)? "LL" : " " + "LL"; stringValue += stringValue.Equals(string.Empty) ? "LR" : " " + "LR"; } } else { var isleft = false; isleft = (j_end - j_start) < 0; var start = j_start + (isleft ? uptimes * -1 : uptimes); for (int i = 0; i < Math.Abs(uptimes); i++) { count++; stringValue += stringValue.Equals(string.Empty) ? ("U" + (isleft ? "L" : "R")) : (" " + "U" + (isleft ? "L" : "R")); } var leftTimes = j_end - start; if (leftTimes % 2 != 0) { Console.WriteLine("Impossible"); } else { for (int i = 0; i < Math.Abs(leftTimes / 2); i++) { count++; if (leftTimes > 0) stringValue += stringValue.Equals(string.Empty) ? "L": (" " + "L"); else stringValue += stringValue.Equals(string.Empty) ? "R" : (" " + "R"); } } } } else if ((i_end - i_start) < 0) { var uptimes = Math.Abs(i_end - i_start) / 2; if (j_start == j_end && uptimes % 2 != 0) { Console.WriteLine("Impossible"); } else if (j_start == j_end && uptimes % 2 == 0) { var lftTimes = uptimes / 2; for (int i = 0; i < lftTimes; i++) { count++; count++; stringValue += stringValue.Equals(string.Empty) ? "UL" : (" " + "UL"); stringValue += stringValue.Equals(string.Empty) ? "UR" : (" " + "UR"); } } else { var isleft = false; isleft = (j_end - j_start) < 0; var start = j_start + (isleft ? uptimes * -1 : uptimes); for (int i = 0; i < Math.Abs(uptimes); i++) { count++; stringValue += stringValue.Equals(string.Empty) ? ("U" + (isleft ? "L" : "R")) : (" " + ("U" + (isleft ? "L" : "R"))); } var leftTimes = j_end - start; if (leftTimes % 2 != 0) { Console.WriteLine("Impossible"); } else { for (int i = 0; i < Math.Abs(leftTimes/2); i++) { count++; if (leftTimes < 0) stringValue += stringValue.Equals(string.Empty) ? "L" : (" " + "L"); else stringValue += stringValue.Equals(string.Empty) ? "R" : (" " + "R"); } } } } else if ((i_end - i_start) == 0) { var leftTimes = j_end - j_start; if (leftTimes % 2 != 0) { Console.WriteLine("Impossible"); } else { for (int i = 0; i < Math.Abs(leftTimes); i++) { count++; if (leftTimes > 0) stringValue += stringValue.Equals(string.Empty) ? "L" : (" " + "L"); else stringValue += stringValue.Equals(string.Empty) ? "R" : (" " + "R"); } } } } Console.WriteLine(count); Console.WriteLine(stringValue); Console.ReadKey(); } 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); } } }