#include using namespace std; string dir[6]={"UL","UR","R","LR","LL","L"}; 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. bool isVisit[n][n]; int mv , xc , yc; vector v; memset(isVisit,0,n*n); priority_queue< pair < pair > , pair > , vector< pair < pair > , pair > > , greater < pair < pair > , pair > > > pq; pq.push(make_pair(make_pair(0,v),make_pair(i_start,j_start))); while(!pq.empty()){ xc = pq.top().second.second; yc = pq.top().second.first; if(yc == i_end && xc == j_end) break; v = pq.top().first.second; mv = pq.top().first.first; pq.pop(); if(isVisit[yc][xc]) continue; if(yc>=2 && xc>=1 && !isVisit[yc-2][xc-1]) { v.push_back(0); pq.push(make_pair(make_pair(mv+1,v),make_pair(yc-2,xc-1))); v.erase(v.end()-1); } if(yc>=2 && xc+1<=n-1 && !isVisit[yc-2][xc+1]) { v.push_back(1); pq.push(make_pair(make_pair(mv+1,v),make_pair(yc-2,xc+1))); v.erase(v.end()-1); } if(xc+2<=n-1 &&!isVisit[yc][xc+2]) { v.push_back(2); pq.push(make_pair(make_pair(mv+1,v),make_pair(yc,xc+2))); v.erase(v.end()-1); } if(yc+2<=n-1 && xc+1<=n-1 && !isVisit[yc+2][xc+1]) { v.push_back(3); pq.push(make_pair(make_pair(mv+1,v),make_pair(yc+2,xc+1))); v.erase(v.end()-1); } if(yc+2<=n-1 && xc>=1 && !isVisit[yc+2][xc-1]) { v.push_back(4); pq.push(make_pair(make_pair(mv+1,v),make_pair(yc+2,xc-1))); v.erase(v.end()-1); } if(xc>=2 &&!isVisit[yc][xc-2]) { v.push_back(5); pq.push(make_pair(make_pair(mv+1,v),make_pair(yc,xc-2))); v.erase(v.end()-1); } isVisit[yc][xc] = true; } if(pq.empty()){ cout << "Impossible" << endl; return;} v = pq.top().first.second; mv = pq.top().first.first; cout << mv << endl; for(int i = 0; i < v.size(); i++) { if(i == v.size() - 1){ cout << dir[v[i]] << endl; } else cout << dir[v[i]] << ' '; } } int main() { int n; 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; }