#include #include #include #include #include #include constexpr int MAX_N = 205; using namespace std; int n, sx, sy, fx, fy; bool vis[MAX_N][MAX_N]; int last[MAX_N][MAX_N]; int dx[] = { -2, -2, 0, 2, 2, 0 }; int dy[] = { -1, 1, 2, 1, -1, -2 }; int rev[] = { 3, 4, 5, 0, 1, 2 }; const char *names[] = { "UL", "UR", "R", "LR", "LL", "L" }; void bfs() { queue> to_visit; to_visit.push({ sx, sy }); vis[sx][sy] = true; last[sx][sy] = -1; while (!to_visit.empty()) { pair cur = to_visit.front(); to_visit.pop(); for (int d = 0; d < 6; ++d) { int nx = cur.first + dx[d]; int ny = cur.second + dy[d]; if (nx >= 0 && nx < n && ny >= 0 && ny < n) { if (!vis[nx][ny]) { vis[nx][ny] = true; last[nx][ny] = d; to_visit.push({ nx, ny }); } } } } } int main() { scanf(" %d", &n); scanf(" %d %d %d %d", &sx, &sy, &fx, &fy); bfs(); if (!vis[fx][fy]) { printf("Impossible\n"); } else { vector moves; int x = fx, y = fy; while (last[x][y] != -1) { moves.push_back(last[x][y]); int nx = x + dx[rev[last[x][y]]]; int ny = y + dy[rev[last[x][y]]]; x = nx; y = ny; } printf("%d\n", (int) moves.size()); for (int i = moves.size() - 1; i >= 0; --i) { printf("%s ", names[moves[i]]); } } return 0; }