#include using namespace std; #define INF 1000000 int n; bool check(int x, int y) { if(x >= 0 && x < n && y >= 0 && y < n) return true; else return false; } int main() { int i,j; int startx,starty,endx,endy,currx,curry,newx,newy; scanf("%d%d%d%d%d",&n,&startx,&starty,&endx,&endy); int dist[n][n]; bool visited[n][n]; int dx[6] = {-2,-2,0,2,2,0}; int dy[6] = {-1,1,2,1,-1,-2}; char move[6][3] = {"UL","UR","R","LR","LL","L"}; for(i = 0 ; i < n ; i++) for(j = 0 ; j < n ; j++) { dist[i][j] = INF; visited[i][j] = false; } pair p; queue< pair > q; dist[endx][endy] = 0; visited[endx][endy] = true; q.push(make_pair(endx,endy)); while(!q.empty()) { p = q.front(); q.pop(); currx = p.first; curry = p.second; for(i = 0 ; i < 6 ; i++) { newx = currx + dx[i]; newy = curry + dy[i]; if(check(newx,newy) && !visited[newx][newy]) { dist[newx][newy] = dist[currx][curry] + 1; visited[newx][newy] = true; q.push(make_pair(newx,newy)); } } } if(dist[startx][starty] == INF) printf("Impossible"); else { printf("%d\n",dist[startx][starty]); currx = startx; curry = starty; while(1) { if(currx == endx && curry == endy) break; for(i = 0 ; i < 6 ; i++) { if(check(currx+dx[i],curry+dy[i]) && dist[currx+dx[i]][curry+dy[i]] + 1 == dist[currx][curry]) { printf("%s ",move[i]); currx += dx[i]; curry += dy[i]; break; } } } } return 0; }