// main.cpp // solve // // Created by Ahmed on 11/16/16. // Copyright © 2016 Abdellah. All rights reserved. // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define f first #define s second #define pb push_back #define sz(a) (int)a.size() #define lp(i,a,n) for(int (i)=(a);(i)<=(int)(n);(i)++) #define lpd(i,n,a) for(int (i)=(n);(i)>=(a);--(i)) #define mp make_pair #define clr(a,b) memset(a,b,sizeof a) #define all(v) v.begin(),v.end() #define mod 1000000007 #define eps 1e-6 #define infi 1000000000 #define infll 4000000000000000005ll #define MX 1000000 #define X real() #define Y imag() #define polar(r,t) ((r)* exp(point(0,(t)))) #define length(a) hypot( (a).X , (a).Y ) #define angle(a) atan2( (a).Y , (a).X ) #define vec(a,b) ( (b) - (a) ) #define dot(a,b) (conj(a)*(b)).X #define cross(a,b) (conj(a)*(b)).Y #define lengthsqr(a) dot(a,a) #define reflect(V,M) (conj((V)/(M)) * (M)) #define normalize(a) ((a)/length(a)) #define ccw(a,b,c) cross(vec(a,b) , vec(a,c)) > -eps #define cosRule(a,b,c) (acos(((a)*(a)+(b)*(b)-(c)*(c))/(2*(a)*(b)))) #define cosDot(a,b) (acos(dot(a,b)/length(a)/length(b))) #define EQ(a,b) (fabs((a) - (b)) <= eps) /* equal to */ #define NE(a,b) (fabs((a) - (b)) > eps) /* not equal to */ #define LT(a,b) ((a) < (b) - eps) /* less than */ #define GT(a,b) ((a) > (b) + eps) /* greater than */ #define LE(a,b) ((a) <= (b) + eps) /* less than or equal to */ #define GE(a,b) ((a) >= (b) - eps) /* greater than or equal to */ #define mod1 100050001 #define mod2 100030001 #define base1 37 #define base2 31 #define que priority_queue, vector> , greater > > #define rotate(v,t) ((v)*exp(point(0,t))) #define rotateabout(v,t,a) (rotate(vec(a,v),t)+(a)) #define PI atan(1)*4 using namespace std; typedef long long ll; typedef pair pii; typedef pair pdd; typedef pair pll; typedef vector vi; typedef vector vll; typedef vector vvi; typedef set si; typedef map mii; typedef map mll; typedef unordered_map umll; typedef complex point; typedef pair line; typedef pair Circle; using namespace std; const int N = 202; int dirI[] = {-2,-2,0,2, 2, 0}; int dirJ[] = {-1, 1,2,1,-1,-2}; string arr[] = {"UL","UR","R","LR","LL","L"}; vector vis(N*N,false); vi parent(N*N,-1) , print(N*N,-1); void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { vis[i_start * n + j_start] = true; queue p; p.push(mp(0,i_start * n + j_start)); while(!p.empty()) { pair curr = p.front(); p.pop(); int currJ = curr.second % n; int currI = (curr.second-currJ)/n; for(int i = 0;i<6;i++) { int nextI = currI + dirI[i], nextJ = currJ + dirJ[i]; int nextNode = nextI*n+nextJ; if( nextI >= 0 && nextI < n && nextJ >= 0 && nextJ < n && !vis[nextNode]) { vis[nextNode] = true; parent[nextNode] = curr.s; print[nextNode] = i; p.push(make_pair(curr.f+1,nextNode)); } } } int last = i_end * n + j_end; if(parent[last] == -1) { printf("Impossible\n"); return; } vi ans; while(parent[last] != -1) ans.pb(print[last]) , last = parent[last]; printf("%d\n",sz(ans)); while(!ans.empty()) printf("%s ",arr[ans.back()].c_str()) , ans.pop_back(); } int main() { int n; cin >> n; int i_start; int j_start; int i_end; int j_end; cin >> i_start >> j_start >> i_end >> j_end; printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }