#include #include #include #include #include #include #define MP make_pair #define X first #define Y second using namespace std; typedef pair pii; int d[210][210]; string dirn[6] = {"UL", "UR", "R", "LR", "LL", "L"}; pii next(pii curr, int move, int n) { if (move == 0 && curr.X > 1 && curr.Y > 0) return MP(curr.X - 2, curr.Y - 1); if (move == 1 && curr.X > 1 && curr.Y < n - 1) return MP(curr.X - 2, curr.Y + 1); if (move == 2 && curr.Y < n - 2) return MP(curr.X, curr.Y + 2); if (move == 3 && curr.X < n - 2 && curr.Y < n - 1) return MP(curr.X + 2, curr.Y + 1); if (move == 4 && curr.X < n - 2 && curr.Y > 0) return MP(curr.X + 2, curr.Y - 1); if (move == 5 && curr.Y > 1) return MP(curr.X, curr.Y - 2); return MP(-1, -1); } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int n; cin >> n; int x0, y0, x1, y1; cin >> x1 >> y1 >> x0 >> y0; for (int i = 0 ; i <= n ; ++i) { for (int j = 0 ; j <= n ; ++j) d[i][j] = 1e9; } queue q; q.push(MP(x0, y0)); d[x0][y0] = 0; while (!q.empty()) { pii curr = q.front(); q.pop(); for (int i = 0 ; i < 6 ; ++i) { pii nxt = next(curr, i, n); if (nxt.X != -1 && d[nxt.X][nxt.Y] == 1e9) { d[nxt.X][nxt.Y] = d[curr.X][curr.Y] + 1; q.push(nxt); } } } if (d[x1][y1] == 1e9) { cout << "Impossible" << endl; return 0; } cout << d[x1][y1] << endl; pii curr = MP(x1, y1), dest = MP(x0, y0); while (curr != dest) { for (int i = 0 ; i < 6 ; ++i) { pii nxt = next(curr, i, n); if (nxt.X != -1 && d[nxt.X][nxt.Y] == d[curr.X][curr.Y] - 1) { curr = nxt; cout << dirn[i] << " "; break; } } } cout << endl; return 0; }