#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define TRACE(x) cerr << #x << " " << x << endl #define FOR(i, a, b) for (int i = (a); i < int(b); ++i) #define REP(i, n) FOR(i, 0, n) #define _ << " " << #define fst first #define snd second typedef long long llint; typedef pair pii; const int B = 27397, MOD = 1e9 + 7; const int B1 = 33941, MOD1 = 1e9 + 9; const int MAXN = 201; const int dr[] = {-2, -2, 0, 2, 2, 0}; const int ds[] = {-1, 1, 2, 1, -1, -2}; const string dir[] = {"UL", "UR", "R", "LR", "LL", "L"}; int N; int sr, ss, fr, fs; int dist[MAXN][MAXN]; int ex[MAXN][MAXN]; queue Q; inline bool check(int r, int s) { return r >= 0 && r < N && s >= 0 && s < N && dist[r][s] == -1; } void bfs() { while (!Q.empty()) { auto curr = Q.front(); Q.pop(); for (int i = 0; i < 6; ++i) { int _r = curr.first + dr[i], _s = curr.second + ds[i]; if (!check(_r, _s)) continue; dist[_r][_s] = dist[curr.first][curr.second] + 1; ex[_r][_s] = i; Q.push({_r, _s}); } } } int main(void) { scanf("%d", &N); scanf("%d%d%d%d", &sr, &ss, &fr, &fs); memset(dist, -1, sizeof dist); dist[sr][ss] = 0; Q.push({sr, ss}); bfs(); if (dist[fr][fs] == -1) { printf("Impossible\n"); return 0; } printf("%d\n", dist[fr][fs]); stack S; int r = fr, s = fs; while (dist[r][s] != 0) { int _ex = ex[r][s]; S.push(dir[_ex]); r -= dr[_ex], s -= ds[_ex]; } while (!S.empty()) { printf("%s ", S.top().c_str()); S.pop(); } printf("\n"); return 0; }