#include using namespace std; #define display(arr,s,e) for(i=s; i<=e; i++) cout<=e;i--) #define endl "\n" #define ll long long #define mid(a,b) ((a)+((b-a)/2)) #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) // Useful STL commands: #define pb push_back #define mp make_pair #define f first #define s second #define si set #define vi vector #define ii pair #define sii set #define vii vector #define all(c) c.begin(),c.end() #define tr(c,it) for(auto it=c.begin();it!=c.end();++it) #define DEBUG // debugging #ifdef DEBUG #define trace1(x) cerr << #x << ": " << x << endl; #define trace2(x, y) cerr << #x << ": " << x << " | " << #y << ": " << y << endl; #define trace3(x, y, z) cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl; #define trace4(a, b, c, d) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl; #define trace5(a, b, c, d, e) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl; #define trace6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl; #else #define trace1(x) #define trace2(x, y) #define trace3(x, y, z) #define trace4(a, b, c, d) #define trace5(a, b, c, d, e) #define trace6(a, b, c, d, e, f) #endif ll gcd(ll a, ll b) { if( (a == 0) || (b == 0) ) return a + b; return gcd(b, a % b); } ll pow_mod(ll a, ll b) { ll res = 1; while(b) { if(b & 1) res = (res * a)%MOD; a = (a * a)%MOD; b >>= 1; } return res; } bool isPrime(ll a) { for(int i=3; (i*i)<=a; i+=2) { if( (a%i)==0 ) { return false; } } return true; } ll arr[210][210], N; pair prio[10]; map ma; vector vc; bool check( ll X, ll Y ) { if( X<=0 || Y<=0 || X>N || Y>N ) return 0; return 1; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); ll i, j, starx, stary, endx, endy; prio[1] = mp(-1, -2); prio[2] = mp(1, -2); prio[3] = mp(2, 0); prio[4] = mp(1, 2); prio[5] = mp(-1, 2); prio[6] = mp(-2, 0); ma[1] = "UL"; ma[2] = "UR"; ma[3] = "R"; ma[4] = "LR"; ma[5] = "LL"; ma[6] = "L"; cin >> N; cin >> starx >> stary >> endx >> endy; starx++; stary++; endx++; endy++; swap(starx, stary); swap(endx, endy); arr[starx][stary] = -1; queue< pair > qu; qu.push( mp(starx, stary) ); while( !qu.empty() ) { pair opop = qu.front(); qu.pop(); rep(i, 1, 6) { ll xx = opop.f + prio[i].f; ll yy = opop.s + prio[i].s; if( check(xx, yy) && !arr[xx][yy] ) { qu.push( mp(xx, yy) ); arr[xx][yy] = i; //trace2(xx, yy) } } } //trace1(arr[endx][endy]) if( !arr[endx][endy] ) { cout << "Impossible"; return 0; } ll ans = 0; while(arr[endx][endy]!=-1) { ll val = arr[endx][endy]; ans++; endx -= prio[val].f; endy -= prio[val].s; vc.pb( ma[val] ); } reverse(all(vc)); cout << ans << endl; rep(i, 0, (int)vc.size()-1) { cout << vc[i] << " "; } return 0; }