/*{{{*/ //#define HOME #include using namespace std; template void _R(T &x) { cin >> x; } void _R(int &x) { scanf("%d", &x); } void _R(int64_t &x) { scanf("%lld", &x); } void _R(double &x) { scanf("%lf", &x); } void _R(char &x) { scanf(" %c", &x); } void _R(char *x) { scanf("%s", x); } void R() {} template void R(T &head, U &... tail) { _R(head); R(tail...); } template void _W(const T &x) { cout << x; } void _W(const int &x) { printf("%d", x); } void _W(const int64_t &x) { printf("%lld", x); } void _W(const double &x) { printf("%.16f", x); } void _W(const char &x) { putchar(x); } void _W(const char *x) { printf("%s", x); } template void _W(const pair &x) {_W(x.F); putchar(' '); _W(x.S);} template void _W(const vector &x) { for (auto i = x.begin(); i != x.end(); _W(*i++)) if (i != x.cbegin()) putchar(' '); } void W() {} template void W(const T &head, const U &... tail) { _W(head); putchar(sizeof...(tail) ? ' ' : '\n'); W(tail...); } template void DB(const T &head, const U &... tail) { #ifdef HOME _W('#'); _W(head); putchar(sizeof...(tail) ? ' ' : '\n'); W(tail...); #endif } #define REP(i,a,b) for (int i = (a); i <= (b); ++i) #define REPD(i,a,b) for (int i = (a); i >= (b); --i) #define FORI(i,n) REP(i,1,n) #define FOR(i,n) REP(i,0,int(n)-1) #define ITER(i,t) for (auto i = t.begin(); i != t.end(); ++i) #define MP make_pair #define PB push_back #define EP emplace_back #define F first #define S second #define SZ(x) int((x).size()) #define ALL(x) (x).begin(), (x).end() #define UNIQUE(x) {sort(ALL(x)); (x).erase(unique(ALL(x)), (x).end());} #define MS0(X) memset((X), 0, sizeof((X))) #define MS1(X) memset((X), -1, sizeof((X))) //#define DB(v) cerr << #v << " = " << (v) << endl; typedef pair pii; typedef vector vi; typedef int64_t ll; /*}}}*/ const int dr[] = {-2, -2, 0, 2, 2, 0}; const int dc[] = {-1, 1, 2, 1, -1, -2}; const char name[][5] = {"UL", "UR", "R", "LR", "LL", "L"}; const int N = 200+10; int n; pii st, ed; vi path; int vis[N][N], way[N][N]; pii pre[N][N]; void dfs(pii v){ vis[v.F][v.S] = 1; for(int i=0; i<6; ++i){ int nr = v.F+dr[i], nc = v.S+dc[i]; //auto nv = mp(nr, nc); if(vis[nr][nc]) continue; } } int main(){ R(n, st.F, st.S, ed.F, ed.S); queue< pii > que; que.push(st), vis[st.F][st.S] = 1; while(!que.empty()){ pii v = que.front(); que.pop(); DB(v.F, v.S); if(v == ed) break; for(int i=0; i<6; ++i){ int nr = v.F+dr[i], nc = v.S+dc[i]; if(nr<0||n<=nr||nc<0||n<=nc) continue; if(vis[nr][nc]) continue; else{ pre[nr][nc] = v; way[nr][nc] = i; vis[nr][nc] = 1; que.push(MP(nr, nc)); } } } if(vis[ed.F][ed.S]){ pii v = ed; while(v != st){ path.push_back(way[v.F][v.S]); v = pre[v.F][v.S]; } reverse(path.begin(), path.end()); } if(path.size()){ W(path.size()); for(int i: path) printf("%s ", name[i]); W("\n"); }else{ W("Impossible"); } return 0; }