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 == 1) { Console.WriteLine("Impossible"); return; } var moves = new List(); if(i_start == i_end) { if(Math.Abs(j_start - j_end) % 2 == 1) { Console.WriteLine("Impossible"); return; } string direction = i_end < i_start ? "L" : "R"; int count = Math.Abs(i_start - i_end) / 2; for(int i = 0; i < count; i++) moves.Add(direction); } else if(j_start == j_end) { string direction = j_end < j_start ? "U" : "L"; int count = Math.Abs(i_start - i_end) / 2; for(int i = 0; i < count / 2; i++) moves.Add(direction + "R"); for(int i = 0; i < count / 2; i++) moves.Add(direction + "L"); } else { string i_direction = i_end < i_start ? "U" : "L"; int vertCount = Math.Abs(i_end - i_start) / 2; if((vertCount % 2) != Math.Abs(j_end - j_start) % 2) { Console.WriteLine("Impossible"); return; } int j_dist = Math.Abs(j_end - j_start); int j_current = j_start, i_current = i_start; while(true) { string j_direction = j_end < j_current ? "L" : "R"; moves.Add(i_direction + j_direction); i_current += i_direction.Equals("U") ? -2 : 2; j_current += j_direction.Equals("L") ? -1 : 1; if(i_current == 0) { int h_count = Math.Abs(j_current - j_end) / 2; j_direction = j_end < j_current ? "L" : "R"; for(int i = 0; i < h_count; i++) moves.Add(j_direction); break; } } } Console.WriteLine(moves.Count()); Console.WriteLine(string.Join(" ", moves)); } 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); } }