// codersan #include using namespace std; #define pb push_back #define mp make_pair #define f first #define s second #define init(a,b) memset(a,b,sizeof(a)); #define pnl() printf("\n"); #define tr(container,it) for(typeof(container.begin()) it=container.begin() ; it!=container.end() ; it++) #define sortv(a) sort(a.begin(),a.end()); #define go() int t; cin>>t; while(t--) #define forl(i,a,b) for(int i=a;ib;i--) #define ll long long int #define mod 1000000007LL typedef vector vi; typedef pair pii; typedef vector vpii; template T gcd(T a, T b) { T temp; while(b>0) {temp = b; b=a%b; a=temp;} return a;} template T fast(T a, T b) { T prod=1; while(b){if(b&1)prod=(prod*a); a=(a*a),b/=2;} return prod;} template T fastmod(T a, T b, T m) { T prod=1; while(b){if(b&1)prod=(prod*a)%m; a=(a*a)%m,b/=2;} return prod;} template T sqr(const T &x) { return x*x; } template T lowbit(const T &x) { return (x^(x-1))&x; } template int countbit(const T &n) { return (n==0)?0:(1+countbit(n&(n-1))); } template void ckmin(T &a,const T &b) { if (b void ckmax(T &a,const T &b) { if (b>a) a=b; } template T maxm(const T &a,const T &b) { return (a>b?a:b); } int n, ans = -1; vectoradj[41234]; vectoradjDir[41234]; bool vis[41234]; pii par[41234]; int dx[6]; int dy[6]; string dir[6]; bool valid(int x, int y){ return (x >= 0 && x < n && y >= 0 && y < n); } int bfs(int src, int dest){ queueq; q.push(mp(src,0)); vis[src] = true; while(!q.empty()) { pii pa = q.front(); q.pop(); int node = pa.f, level = pa.s; if(node == dest) { ans = level; break; } for(int i = 0 ; i < adj[node].size(); i++){ int u = adj[node][i]; if(!vis[u]) { vis[u] = true; q.push(mp(u, level + 1)); par[u] = mp(node, adjDir[node][i]); } } } return ans; } int main(){ dx[0] = -2, dx[1] = -2, dx[2] = 0, dx[3] = 2, dx[4] = 2, dx[5] = 0; dy[0] = -1, dy[1] = 1, dy[2] = 2, dy[3] = 1, dy[4] = -1, dy[5] = -2, dir[0] = "UL", dir[1] = "UR", dir[2] = "R", dir[3] = "LR", dir[4] = "LL", dir[5] = "L"; cin >> n; for(int x = 0; x < n; x++){ for(int y = 0; y < n; y++){ int node = x * n + y; for(int z = 0; z < 6; z++){ if(valid(x + dx[z], y + dy[z])){ adj[node].pb((x + dx[z]) * n + y + dy[z]); adjDir[node].pb(z); } } } } int sx, sy, ex, ey, src, dest; cin >> sx >> sy >> ex >> ey; src = sx * n + sy, dest = ex * n + ey; int ans = bfs(src, dest); if(ans == -1) { cout << "Impossible"; } else { cout << ans << endl; int cn = dest; string path= ""; while(cn != src){ string x = dir[par[cn].s] + " " + path; path = x; cn = par[cn].f; } cout << path << endl; } return 0; }