#define _p(...) (void)printf(__VA_ARGS__) #define fi first #define infInt 2147483647 #define infLongInt 2147483647 #define infLongLongInt 9223372036854775807 #define ll long int #define lld long long int #define mp make_pair #define pb push_back #define pii pair #define vi vector #define vpii vector #define SZ(x) ((int)(x.size())) #define IN(x,y) ((y).find((x))!=(y).end()) #define PI 3.14159265 #define foreach(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) #define rep(i,n) for(int i=0;i // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // over write the sqrt of orinal c function // #include // #include const int MOD = 1e9 + 7; using namespace std; template void priArr(T a[],int i,int j,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; repd(b,i,j) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; } if(!nl) newline } template void priArr(T a[],int i,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; rep(b,i+1) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; } if(!nl) newline } template void priVec(T a,int i,int j,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; repd(b,i,j) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; } if(!nl) newline } template void priVec(T a,int i,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; int p = 0; rep(b,i) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; p++; } if(!nl) newline } template T max1(T a,T b) { return a>b ? a :b; } template T min1(T a,T b) { return a T max1(T a,T b,T c) { return max1(a,max1(b,c)); } template T min1(T a,T b,T c) { return min1(a,min1(b,c)); } template T abs1(T a,T b) { return a>b ? a-b : b-a; } template void swap1(T a,T b) { T temp = b; b = a; a = temp; } template void swap1(T a[],int i,int j) { T temp = a[i]; a[i] = a[j]; a[j] = temp; } template void reset(T array[],int size,P value) { rep(i,size) array[i] = value; } //dont do silly mistake as always- //1-int or long long int or ull //2-do u understand question correctly? //3-MOST IMP-BE CALM YOU CAN DO:) //4-think edge case or corner case before submitting. //5-Think weather to use long long or long or int plau safe side on single variable. const int MAXN = 200 + 10; const int MAXM = 100000 + 10; bool hack = false; int t,n; int starI,startJ,endI,endJ; int maxmoves = INT_MAX; bool found = false; int pos = 0; pair validMoves[6] = {mp(-2,-1),mp(-2,1),mp(0,2),mp(2,1),mp(2,-1),mp(0,-2)}; int visited[MAXN][MAXN] = {0}; string path[5*MAXN]; string getMove(pair a,pair b) { pair c = mp(b.fi-a.fi,b.se-a.se); if(c == mp(-2,-1)) return "UL"; if(c == mp(-2,1)) return "UR"; if(c == mp(0,2)) return "R"; if(c == mp(2,1)) return "LR"; if(c == mp(2,-1)) return "LL"; if(c == mp(0,-2)) return "L"; cout << "ERROR : NOT DEFINES " << a.fi << " " << a.se << endl; return NULL; } bool isBetween(pair a,pair b,pair c) { if(a.fi >= min1(b.fi,c.fi) && a.fi <= max1(b.fi,c.fi)) { if(a.se >= min1(b.se,c.se) && a.se <= max1(b.se,c.se)) return true; } return false; } bool dfs(pair u,int moves) { if(u.fi == endI && u.se == endJ) { if(moves < maxmoves) { maxmoves = moves; pos = 0; found = true; return true; } else return false; } std::vector< pair > adj; rep(i,6) { int newu = u.fi + validMoves[i].fi; int newv = u.se + validMoves[i].se; if(isBetween(mp(newu,newv),mp(0,0),mp(n-1,n-1)) && moves+1 < visited[newu][newv]) { adj.pb(mp(newu,newv)); visited[newu][newv] = moves+1; } } bool validPath = false; rep(i,SZ(adj)) { if( dfs(adj[i],moves+1) ) { validPath = true; path[pos++] = getMove(u,adj[i]); } } return validPath; } int main(int argc, char const *argv[]) { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> n; cin >> starI >> startJ >> endI >> endJ; rep(i,n) rep(j,n) visited[i][j] = INT_MAX; visited[starI][startJ] = 0; dfs(mp(starI,startJ),0); if(!found || maxmoves == INT_MAX) cout << "Impossible" << endl; else { cout << maxmoves << endl; for(int i = pos-1;i>=0 ;i--) cout << path[i] << " "; cout << endl; } return 0; }