#include using namespace std; #define VISITED 100 #define out(i, j, n) (i < 0 || j < 0 || i >= n || j >= n) void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { int move[6][2] = {{-2, -1}, {-2, 1}, {0, 2}, {2, 1}, {2, -1}, {0, -2}}; string move_str[6] = {"UL", "UR", "R", "LR", "LL", "L"}; int grid[n][n], i_curr, j_curr, k; memset(grid, -1, sizeof(grid)); queue > q; q.push(make_pair(i_start, j_start)); grid[i_start][j_start] = VISITED; int found = 0; while(!q.empty() && !found) { pair curr = q.front(); q.pop(); for(int i = 0; i < 6; i++) { i_curr = curr.first + move[i][0]; j_curr = curr.second + move[i][1]; if (!out(i_curr, j_curr, n) && grid[i_curr][j_curr] == -1) { grid[i_curr][j_curr] = i; q.push(make_pair(i_curr, j_curr)); } if (i_curr == i_end && j_curr == j_end) { found = 1; break; } } } if (!found) { cout << "Impossible" << endl; } else { vector ans; while(i_curr != i_start || j_curr != j_start) { k = grid[i_curr][j_curr]; ans.push_back(move_str[k]); i_curr -= move[k][0]; j_curr -= move[k][1]; } cout << ans.size() << endl; for(int i = ans.size() - 1; i >= 0; i--) { cout << ans[i] << " "; } cout << endl; } } 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; }