#include #include #include #include #include using namespace std; int tab[200][200]; struct pos { int x, y; }; struct prevv { pos p; string s; }; prevv res[200][200]; int main() { int n; scanf("%d", &n); pos start, end; scanf("%d %d %d %d", &start.y, &start.x, &end.y, &end.x); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) res[i][j].p.x = -1; res[start.x][start.y].p.x = 1001; queue q; q.push(start); while(!q.empty()) { auto cur = q.front(); q.pop(); if(cur.x > 0 && cur.y > 1 && res[cur.x-1][cur.y-2].p.x == -1) { res[cur.x-1][cur.y-2].p = cur; res[cur.x-1][cur.y-2].s = "UL"; if(cur.x-1 == end.x && cur.y-2 == end.y) break; q.push({cur.x-1, cur.y-2}); } if(cur.x < n-1 && cur.y > 1 && res[cur.x+1][cur.y-2].p.x == -1) { res[cur.x+1][cur.y-2].p = cur; res[cur.x+1][cur.y-2].s = "UR"; if(cur.x+1 == end.x && cur.y-2 == end.y) break; q.push({cur.x+1, cur.y-2}); } if(cur.x < n-2 && res[cur.x+2][cur.y].p.x == -1) { res[cur.x+2][cur.y].p = cur; res[cur.x+2][cur.y].s = "R"; if(cur.x+2 == end.x && cur.y == end.y) break; q.push({cur.x+2, cur.y}); } if(cur.x < n-1 && cur.y < n-2 && res[cur.x+1][cur.y+2].p.x == -1) { res[cur.x+1][cur.y+2].p = cur; res[cur.x+1][cur.y+2].s = "LR"; if(cur.x+1 == end.x && cur.y+2 == end.y) break; q.push({cur.x+1, cur.y+2}); } if(cur.x > 0 && cur.y < n-2 && res[cur.x-1][cur.y+2].p.x == -1) { res[cur.x-1][cur.y+2].p = cur; res[cur.x-1][cur.y+2].s = "LL"; if(cur.x-1 == end.x && cur.y+2 == end.y) break; q.push({cur.x-1, cur.y+2}); } if(cur.x > 1 && res[cur.x-2][cur.y].p.x == -1) { res[cur.x-2][cur.y].p = cur; res[cur.x-2][cur.y].s = "L"; if(cur.x-2 == end.x && cur.y == end.y) break; q.push({cur.x-2, cur.y}); } } if(res[end.x][end.y].p.x == -1) printf("Impossible\n"); else { prevv cur = res[end.x][end.y]; vector path; while(cur.p.x != start.x || cur.p.y != start.y) { path.push_back(cur.s); cur = res[cur.p.x][cur.p.y]; } path.push_back(cur.s); printf("%d\n", (int)path.size()); for(int i = path.size() - 1; i >= 0; i--) cout << path[i] << " "; printf("\n"); } return 0; }