#include using namespace std; bool visited[210][210]; int x, y, n; bool flag; pair, int> previous[210][210]; 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. memset(visited, 0, sizeof(visited)); x = i_end; y = j_end; visited[i_start][j_start] = true; queue, int> > q; for(int i = 0;i<6;++i) q.push(make_pair(make_pair(i_start, j_start), i)); flag = false; while(!q.empty()) { pair, int> cur = q.front(); q.pop(); int a = cur.first.first; int b = cur.first.second; int t = cur.second; int tempX = a; int tempY = b; if(t == 0) { a -= 2; b -= 1; } else if(t == 1) { a -= 2; b += 1; } else if(t == 2) { b += 2; } else if(t == 3) { a += 2; b += 1; } else if(t == 4) { a += 2; b -= 1; } else { b -= 2; } if(a < 0 || a >= n || b < 0 || b >= n) continue; if(visited[a][b]) continue; visited[a][b] = true; previous[a][b] = make_pair(make_pair(tempX, tempY), t); if(a == x && b == y) { vector ans; int counter = 0; flag = true; tempX = a; tempY = b; while(a != i_start || b != j_start) { ++counter; pair, int> temp = previous[a][b]; a = temp.first.first; b = temp.first.second; ans.push_back(temp.second); } printf("%d\n", counter); for(int i=ans.size()-1;i>=0;--i) { if(i != ans.size() - 1) printf(" "); if(ans[i] == 0) printf("UL"); else if(ans[i] == 1) printf("UR"); else if(ans[i] == 2) printf("R"); else if(ans[i] == 3) printf("LR"); else if(ans[i] == 4) printf("LL"); else printf("L"); } flag = true; break; } for(int i = 0;i<6;++i) q.push(make_pair(make_pair(a, b), i)); } if(!flag) printf("Impossible\n"); } int main() { cin >> n; int i_start; int j_start; int i_end; int j_end; cin >> i_start >> j_start >> i_end >> j_end; printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }