#include using namespace std; int d[205][205]; void printShortestPath(int n, int c, int r, int a, int b) { int dx[6] = {-2, -2, 0, 2, 2, 0}; int dy[6] = {-1, 1, 2, 1, -1, -2}; string ime[6] = {"UL", "UR", "R", "LR", "LL", "L"}; memset(d, 255, sizeof(d)); queue> q; d[a][b] = 0; q.push({a, b}); auto v = [&](int x, int y, int di) { if (x < 0 || x >= n || y < 0 || y >= n) { return; } if (d[x][y] != -1) { return; } d[x][y] = di; q.push({x, y}); }; auto w = [&](int x, int y) { if (x < 0 || x >= n || y < 0 || y >= n) { return -123123; } return d[x][y]; }; while (!q.empty()) { auto p = q.front(); q.pop(); int x = p.first; int y = p.second; int di = d[x][y] + 1; for (int i=0; i<6; i++) { v(x + dx[i], y + dy[i], di); } } if (d[c][r] == -1) { cout << "Impossible\n"; } else { cout << d[c][r] << '\n'; vector sol; while (c != a || r != b) { // cerr << c << ' ' << r << '\n'; for (int i=0; i<6; i++) { if (w(c + dx[i], r + dy[i]) == w(c, r) - 1) { c += dx[i]; r += dy[i]; sol.push_back(ime[i]); break; } } } for (int i=1; i<=(int)sol.size(); i++) { cout << sol[i-1]; cout << ((i == (int)sol.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; }