#include #include #include #include #include #include using namespace std; const int dx[] = {-2, -2, 0, 2, 2, 0}; const int dy[] = {-1, 1, 2, 1, -1, -2}; const string G[] = {"UL", "UR", "R", "LR", "LL", "L"}; const int N = 700; int n, s, t, ss, tt; int f[N][N], trace[N][N]; bool can(int u, int v) { return u >= 0 && v >= 0 && u < n && v < n; } void bfs(int s, int t, int ss, int tt) { memset(f, -1, sizeof f); memset(trace, -1, sizeof trace); queue < pair > Q; f[s][t] = 0; Q.push({s, t}); while (!Q.empty()) { int u = Q.front().first, v = Q.front().second; Q.pop(); for (int i = 0; i < 6; i++) { int nu = u + dx[i], nv = v + dy[i]; if (can(nu, nv)) { if (f[nu][nv] == -1) { f[nu][nv] = f[u][v] + 1; trace[nu][nv] = i; Q.push({nu, nv}); } } } } if (f[ss][tt] == -1) { cout << "Impossible" << '\n'; } else { vector res; while (trace[ss][tt] != -1) { res.push_back(G[trace[ss][tt]]); int A = ss, B = tt; ss -= dx[trace[A][B]]; tt -= dy[trace[A][B]]; } cout << res.size() << '\n'; reverse(res.begin(), res.end()); for (int i = 0; i < (int) res.size(); i++) { cout << res[i] << ' '; } cout << '\n'; } } int main() { cin >> n; cin >> s >> t >> ss >> tt; bfs(s, t, ss, tt); return 0; }