using System; using System.Collections.Generic; using System.IO; using System.Linq; 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(Math.Abs(i_start - i_end) % 2 != 0) { Console.WriteLine("Impossible"); return; } if(Math.Abs(i_start - i_end) % 4 == 0 && Math.Abs(j_start - j_end) % 2 == 0) { PrintPath(n, i_start, j_start, i_end, j_end); return; } else if(Math.Abs(i_start - i_end) % 4 != 0 && Math.Abs(i_start - i_end) % 2 == 0 && Math.Abs(j_start - j_end) % 2 == 1) { PrintPath(n, i_start, j_start, i_end, j_end); return; } Console.WriteLine("Impossible"); return; } static void PrintPath(int n, int i_start, int j_start, int i_end, int j_end) { var stepCount = 0; var i_cur = i_start; var j_cur = j_start; List steps = new List(); while(!(i_cur == i_end && j_cur == j_end)) { //Console.WriteLine(i_cur + "; " + j_cur); stepCount++; if(i_cur > i_end && j_cur > j_end) { steps.Add("UL"); i_cur -= 2; j_cur--; continue; } if(i_cur > i_end && j_cur <= j_end) { steps.Add("UR"); i_cur -= 2; j_cur++; continue; } if(j_cur < j_end) { steps.Add("R"); j_cur++; continue; } if(i_cur < i_end && j_cur <= j_end) { steps.Add("LR"); i_cur += 2; j_cur++; continue; } if(i_cur < i_end && j_cur > j_end) { steps.Add("LL"); i_cur += 2; j_cur--; continue; } steps.Add("L"); j_cur-=2; } Console.WriteLine(stepCount); Console.WriteLine(string.Join(" ", steps)); } 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); } }