#include using namespace std; typedef long long ll; typedef vector vl; typedef vector vvl; typedef pair pll; typedef vector vb; const ll oo = 0x3f3f3f3f3f3f3f3f; const double eps = 1e-9; #define sz(c) ll((c).size()) #define all(c) begin(c), end(c) #define FOR(i,a,b) for (ll i = (a); i < (b); i++) #define FORD(i,a,b) for (ll i = (b)-1; i >= (a); i--) #define mp make_pair #define mt make_tuple #define pb push_back #define eb emplace_back #define xx first #define yy second #define has(c,i) ((c).find(i) != end(c)) #define DBGDO(X) ({ if(1) cerr << "DBGDO: " << (#X) << " = " << (X) << endl; }) const string mv[] = {"UL","UR","R","LR","LL","L"}; const ll di[] = {-2,-2,0,2,2,0}, dj[] = {-1,1,2,1,-1,-2}; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll n; cin >> n; ll si, sj, ti, tj; cin >> si >> sj >> ti >> tj; vvl dist(n,vl(n,oo)); vvl pred(n,vl(n)); queue q; q.push({si,sj}); dist[si][sj] = 0; while (sz(q)) { ll i, j; tie(i,j) = q.front(); q.pop(); FOR(k,0,6) { ll ni = i+di[k], nj = j+dj[k]; if (ni < 0 || ni >= n || nj < 0 || nj >= n) continue; if (dist[ni][nj] < oo) continue; dist[ni][nj] = dist[i][j] + 1; pred[ni][nj] = k; q.push({ni,nj}); } } if (dist[ti][tj] == oo) { cout << "Impossible" << endl; return 0; } ll i = ti, j = tj; vl res; while (i != si || j != sj) { ll k = pred[i][j]; res.pb(k); i -= di[k], j -= dj[k]; } reverse(all(res)); cout << sz(res) << endl; for (ll k: res) cout << mv[k] << " "; cout << endl; }