#include // #include "DEBUG.h" using namespace std; struct ${$(){ios_base::sync_with_stdio(0);cin.tie(0);}}$; int dx[] = {-2, -2, 0, 2, 2, 0}; int dy[] = {-1, 1, 2, 1, -1, -2}; int n; vector ord = {"UL", "UR", "R", "LR", "LL", "L"}; typedef pair pii; bool good(int x, int y) { return x >= 0 && y >= 0 && x < n && y < n; } vector bfs(int src, const vector < vector > &graph) { vector from(n * n, -1); vector dist(n * n, -1); dist[src] = 0; queue PQ; PQ.push({0, src}); while(PQ.size()) { int D = PQ.front().first; int U = PQ.front().second; // DEBUG(U); PQ.pop(); if(dist[U] != D) continue; for(int i = 0; i < graph[U].size(); i++) { int D = 1; int V = graph[U][i]; if((dist[V] == -1) || (dist[V] > dist[U] + D)) { from[V] = U; dist[V] = dist[U] + D; PQ.push({dist[V], V}); } } } return from; } void printVector(vector &V) { int sz = V.size(); cout << sz - 1 << endl; for(int i = 0; i + 1 < sz; i++) { int x2 = V[i + 1] / n; int y2 = V[i + 1] % n; int x1 = V[i] / n; int y1 = V[i] % n; for(int k = 0; k < 6; k++) { if(x2 - x1 == dx[k] && y2 - y1 == dy[k]) { cout << ord[k] << " "; } } } cout << endl; } int main() { cin >> n; vector > graph(n * n); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { for(int k = 0; k < 6; k++) { int x = i + dx[k]; int y = j + dy[k]; if(good(x, y)) graph[i * n + j].push_back(x * n + y); } } } int x_st, y_st, x_end, y_end; cin >> x_st >> y_st >> x_end >> y_end; int src = x_st * n + y_st; int end = x_end * n + y_end; vector from = bfs(src, graph); // DEBUG(src, end); if(from[end] == -1) { return cout << "Impossible" << endl, 0; } vector ans; for(int i = end; i != -1; i = from[i]) { ans.push_back(i); } reverse(ans.begin(), ans.end()); printVector(ans); return 0; }