#include #include #define pb push_back #define pf push_front #define pp pop_back #define sz(a) (int)(a.size()) #define mp make_pair #define F first #define S second #define next _next #define prev _prev #define left _left #define right _right #define y1 _y1 #define all(x) x.begin(), x.end() using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair pii; typedef pair pll; const int N = (int)1e6 + 123; const ll INF = (ll)1e18 + 123; const int inf = (int)1e9 + 123; const int MOD = (int)1e9 + 7; void megaRandom() { unsigned int FOR; asm("rdtsc" : "=A"(FOR)); srand(FOR); } int n; pii start, fin; queue q; bool u[511][511]; int d[511][511]; pii dir[] = {{-2, -1}, {-2, 1}, {0, 2}, {2, 1}, {2, -1}, {0, -2}}; bool norm(pii x) { if(0 <= x.F && x.F < n && 0 <= x.S && x.S < n && !u[x.F][x.S]) return 1; return 0; } pii p[511][511]; int ind(int a, int b) { for(int i = 0; i < 6; i ++) if(a == dir[i].F && b == dir[i].S) return i; assert(0); } string ch[] = {"UL", "UR", "R", "LR", "LL", "L"}; string type(int a, int b) { //cout << "a: " << a << " b: " << b << "\n"; for(int i = 0; i < 6; i ++) if(a == dir[i].F && b == dir[i].S) return ch[i]; assert(0); } int main() { megaRandom(); cin >> n; cin >> start.F >> start.S; cin >> fin.F >> fin.S; for(int i = 0; i < n; i ++) for(int j = 0; j < n; j ++) d[i][j] = inf; u[start.F][start.S] = 1; d[start.F][start.S] = 0; q.push(start); while(sz(q)) { pii x = q.front(); q.pop(); for(int it = 0; it < 6; it ++) { pii to = {x.F + dir[it].F, x.S + dir[it].S}; if(norm(to)) { u[to.F][to.S] = 1; d[to.F][to.S] = d[x.F][x.S] + 1; p[to.F][to.S] = x; q.push(to); } } } if(d[fin.F][fin.S] == inf) { cout << "Impossible"; return 0; } vector v; while(fin != start) { //cout << fin.F << ' ' << fin.S << "\n"; pii x = p[fin.F][fin.S]; v.pb(type(fin.F - x.F, fin.S - x.S)); fin = x; } reverse(all(v)); cout << sz(v) << "\n"; for(auto xx : v) cout << xx << ' '; return 0; }