#include #include #include struct solver_t { int n; void solve() { scanf("%d", &n); int sr; int sc; int fr; int fc; scanf("%d", &sr); scanf("%d", &sc); scanf("%d", &fr); scanf("%d", &fc); int si = pack(sr, sc); int fi = pack(fr, fc); static constexpr int GOR[6] = {-2, -2, 0, 2, 2, 0}; static constexpr int GOC[6] = {-1, 1, 2, 1, -1, -2}; std::vector labels; labels.push_back("UL"); labels.push_back("UR"); labels.push_back("R"); labels.push_back("LR"); labels.push_back("LL"); labels.push_back("L"); std::vector pi(n * n, -1); std::vector pm(n * n, -1); std::deque q; q.push_back(si); while (!q.empty()) { int ci = q.front(); q.pop_front(); int r; int c; unpack(ci, r, c); for (int d = 0; d < 6; ++d) { int nr = r + GOR[d]; int nc = c + GOC[d]; int ni = pack(nr, nc); if (nr >= 0 && nr < n && nc >= 0 && nc < n && pm[ni] == -1) { pi[ni] = ci; pm[ni] = d; q.push_back(ni); } } } if (pm[fi] == -1) { printf("Impossible\n"); return; } std::deque path; int ci = fi; while (ci != si) { path.push_front(pm[ci]); ci = pi[ci]; } int res = (int)(path.size()); printf("%d\n", res); for (int i = 0; i < res; ++i) { if (i != 0) { printf(" "); } printf("%s", labels[path[i]].c_str()); } printf("\n"); } int pack(int r, int c) { return r * n + c; } void unpack(int idx, int & r, int & c) { c = idx % n; r = idx / n; } }; int main() { solver_t solver; solver.solve(); return 0; }