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) { int i_diff = (i_start > i_end) ? i_start - i_end : i_end - i_start; int j_diff = (j_start > i_end) ? j_start - j_end : j_end - j_start; var answer = new List(); if (j_diff == 0) { answer = printshortestPathSame_j(i_diff, i_start, i_end); } else if (i_diff == 0) { answer = printshortestPathSame_i(j_diff, j_start, j_end); } else if ((i_diff) % 2 != 0) { answer.Add("Impossible"); } else if ((j_diff - (i_diff / 2)) % 2 != 0) { answer.Add("Impossible"); } else { if (j_end > j_start) { if (i_diff % 2 <= j_diff) { int j_new = j_start + i_diff % 2; int j_newdiff = (j_new > i_end) ? j_new - j_end : j_end - j_new; for (int k = 0; k < (i_diff / 2); k++) { string s = (i_start > i_end) ? "UR" : "LR"; answer.Add(s); } if (j_end - j_new != 0) { var temp_answer = printshortestPathSame_i(j_newdiff, j_new, j_end); foreach (var item in temp_answer) { answer.Add(item); } } } else { int i_new = (i_start > i_end) ? (i_start - 2 * (j_diff)) : (i_start + 2 * (j_diff)); int i_newdiff = (i_new > i_end) ? i_new - i_end : i_end - i_new; for (int k = 0; k < (i_diff / 2); k++) { string s = (i_start > i_end) ? "UR" : "LR"; answer.Add(s); } var temp_answer = printshortestPathSame_j(i_newdiff, i_new, i_end); foreach (var item in temp_answer) { answer.Add(item); } } } else if (j_end < j_start && i_start < i_end) { if (i_diff % 2 <= j_diff) { int j_new = j_start - i_diff / 2; int j_newdiff = (j_new > i_end) ? j_new - j_end : j_end - j_new; for (int k = 0; k < (i_diff / 2); k++) { string s = "LL"; answer.Add(s); } var temp_answer = printshortestPathSame_i(j_newdiff, j_new, j_end); foreach (var item in temp_answer) { answer.Add(item); } } else { int i_new = i_start + 2 * (j_diff); int i_newdiff = (i_new > i_end) ? i_new - i_end : i_end - i_new; for (int k = 0; k < (i_diff / 2); k++) { string s = "LL"; answer.Add(s); } var temp_answer = printshortestPathSame_j(i_newdiff, i_new, i_end); foreach (var item in temp_answer) { answer.Add(item); } } } else if (j_end < j_start && i_start > i_end) { if (i_diff % 2 <= j_diff) { int j_new = j_start - i_diff / 2; int j_newdiff = (j_new > i_end) ? j_new - j_end : j_end - j_new; for (int k = 0; k < (i_diff / 2); k++) { string s = "UL"; answer.Add(s); } var temp_answer = printshortestPathSame_i(j_newdiff, j_new, j_end); foreach (var item in temp_answer) { answer.Add(item); } } else { int i_new = i_start - 2 * (j_diff); int i_newdiff = (i_new > i_end) ? i_new - i_end : i_end - i_new; for (int k = 0; k < (i_diff / 2); k++) { string s = "UL"; answer.Add(s); } var temp_answer = printshortestPathSame_j(i_newdiff, i_new, i_end); foreach (var item in temp_answer) { answer.Add(item); } } } } string final_answer = "empty"; int attempts = 0; foreach (var item in answer) { if (final_answer == "empty") { final_answer = item; attempts++; } else { final_answer += " " + item; attempts++; } } if(final_answer== "Impossible") Console.WriteLine(final_answer); else { Console.WriteLine(attempts); Console.WriteLine(final_answer); } //C//onsole.WriteLine(final_answer); } static List printshortestPathSame_j(int i_diff, int i_start, int i_end) { var answer = new List(); if ((i_diff) % 4 != 0) { answer.Add("Impossible"); } else { int turns = (i_diff) / 4; for (int i = 0; i < turns; i++) { if (i_start < i_end) { answer.Add("LR"); } else { answer.Add("UL"); } } for (int i = 0; i < turns; i++) { if (i_start < i_end) { answer.Add("LL"); } else { answer.Add("UR"); } } } return answer; } static List printshortestPathSame_i(int j_diff, int j_start, int j_end) { var answer = new List(); if (j_diff % 2 != 0) { answer.Add("Impossible"); } else { if (j_start > j_end) { for (int k = 0; k < j_diff / 2; k++) { answer.Add("L"); } } else { for (int k = 0; k < j_diff / 2; k++) { answer.Add("R"); } } } return answer; } 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); } }