#include using namespace std; typedef pair ii; const int Maxn = 205; const int Maxd = 6; const int dy[Maxd] = {-2, -2, 0, 2, 2, 0}; const int dx[Maxd] = {-1, 1, 2, 1, -1, -2}; const string nams[Maxd] = {"UL", "UR", "R", "LR", "LL", "L"}; const int Inf = 1000000000; int dist[Maxn][Maxn]; void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { fill((int*)dist, (int*)dist + Maxn * Maxn, Inf); vector Q; Q.push_back(ii(i_end, j_end)); dist[i_end][j_end] = 0; for (int i = 0; i < Q.size(); i++) { ii v = Q[i]; for (int j = 0; j < Maxd; j++) { ii u = ii(v.first + dy[j], v.second + dx[j]); if (0 <= u.first && u.first < n && 0 <= u.second && u.second < n && dist[v.first][v.second] + 1 < dist[u.first][u.second]) { dist[u.first][u.second] = dist[v.first][v.second] + 1; Q.push_back(u); } } } ii v = ii(i_start, j_start); if (dist[v.first][v.second] >= Inf) { printf("Impossible\n"); return; } int res = dist[v.first][v.second]; printf("%d\n", res); vector seq; while (v != ii(i_end, j_end)) for (int j = 0; j < Maxd; j++) { ii u = ii(v.first + dy[j], v.second + dx[j]); if (0 <= u.first && u.first < n && 0 <= u.second && u.second < n && dist[v.first][v.second] - 1 == dist[u.first][u.second]) { seq.push_back(nams[j]); v = u; break; } } for (int i = 0; i < seq.size(); i++) printf("%s%c", seq[i].c_str(), i + 1 < seq.size()? ' ': '\n'); } 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; }