#include using namespace std; typedef long long int ll; typedef vector vi; typedef vector vl; typedef pair ii; typedef vector vii; typedef pair pll; typedef vector vll; typedef pair tri; typedef vector viii; #define fi(i,a,b) for(auto i=a;i=b;i--) #define pb push_back #define mp make_pair #define ss second #define ff first #define sz(a) a.size() #define sc(x) scanf("%d", &x) #define sc2(x, y) scanf("%d %d", &x, &y) #define sc3(x) scanf("%s", x) #define sc4(x) scanf("%lld", &x) #define sc5(x, y) scanf("%lld %lld", &x, &y) #define all(a) a.begin(), a.end() #define mse(a, x) memset(a, x, sizeof(a)) #define mod 1000000007 #define DREP(a) sort(all(a)); a.erase(unique(all(a)),a.end()); #define INDEX(arr,ind) (lower_bound(all(arr),ind)-arr.begin()) #define DEBUG 1 #define ok if(DEBUG) #define trace1(x) ok cerr << #x << ": " << x << endl; #define trace2(x, y) ok cerr << #x << ": " << x << " | " << #y << ": " << y << endl; #define trace3(x, y, z) ok cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl; #define trace4(a, b, c, d) ok cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " \ << #d << ": " << d << endl; #define trace5(a, b, c, d, e) ok cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " \ << #d << ": " << d << " | " << #e << ": " << e << endl; #define trace6(a, b, c, d, e, f) ok cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " \ << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl; int main() { int n; sc(n); ii a, b; sc2(a.ff, a.ss), sc2(b.ff, b.ss); queue qu; ii vis[n][n], em = {-1, -1}, curr; fi(i, 0, n) { fi(j, 0, n) { vis[i][j] = em; } } qu.push(a); vis[a.ff][a.ss] = {-2, -2}; while(!qu.empty()) { curr = qu.front(); qu.pop(); if(curr == b) { break; } if(curr.ff >= 2 && curr.ss >= 1 && vis[curr.ff-2][curr.ss-1] == em) { qu.push(mp(curr.ff-2, curr.ss-1)); vis[curr.ff-2][curr.ss-1] = curr; } if(curr.ff >= 2 && curr.ss <= n-2 && vis[curr.ff-2][curr.ss+1] == em) { qu.push(mp(curr.ff-2, curr.ss+1)); vis[curr.ff-2][curr.ss+1] = curr; } if(curr.ss <= n-3 && vis[curr.ff][curr.ss+2] == em) { qu.push(mp(curr.ff, curr.ss+2)); vis[curr.ff][curr.ss+2] = curr; } if(curr.ff <= n-3 && curr.ss <= n-2 && vis[curr.ff+2][curr.ss+1] == em) { qu.push(mp(curr.ff+2, curr.ss+1)); vis[curr.ff+2][curr.ss+1] = curr; } if(curr.ff <= n-3 && curr.ss >= 1 && vis[curr.ff+2][curr.ss-1] == em) { qu.push(mp(curr.ff+2, curr.ss-1)); vis[curr.ff+2][curr.ss-1] = curr; } if(curr.ss >= 2 && vis[curr.ff][curr.ss-2] == em) { qu.push(mp(curr.ff, curr.ss-2)); vis[curr.ff][curr.ss-2] = curr; } } if(vis[b.ff][b.ss] == em) { printf("Impossible\n"); } else { stack res; ii prev; curr = b; while(curr != a) { prev = vis[curr.ff][curr.ss]; if(curr.ff == prev.ff-2 && curr.ss == prev.ss-1) { res.push(1); } else if(curr.ff == prev.ff-2 && curr.ss == prev.ss+1) { res.push(2); } else if(curr.ff == prev.ff && curr.ss == prev.ss+2) { res.push(3); } else if(curr.ff == prev.ff+2 && curr.ss == prev.ss+1) { res.push(4); } else if(curr.ff == prev.ff+2 && curr.ss == prev.ss-1) { res.push(5); } else if(curr.ff == prev.ff && curr.ss == prev.ss-2) { res.push(6); } curr = prev; } printf("%ld\n", res.size()); while(!res.empty()) { switch(res.top()) { case 1: printf("UL "); break; case 2: printf("UR "); break; case 3: printf("R "); break; case 4: printf("LR "); break; case 5: printf("LL "); break; case 6: printf("L "); break; } res.pop(); } printf("\n"); } return 0; }