#include #include #include #include #include #include using namespace std; const vector directions = {"UL", "UR" , "R", "LR", "LL", "L"}; vector > visit(205 , vector(205, false)); const vector rr = {-2, -2, 0, 2, 2, 0}; const vector cc = {-1, 1, 2, 1, -1, -2}; int k; struct gNode{ int r , c , m; int idx[3500]; }; bool checkmove(int r , int c){ if(r < 0 || c < 0 || r > k || c > k) return false; return true; } bool solve(gNode node, int rq , int cq){ queue ca; ca.push(node); while(!ca.empty()){ gNode nn = ca.front(); ca.pop(); int r2 = nn.r; int c2 = nn.c; if(r2 == rq && c2 == cq){ cout << nn.m << '\n'; for(int i = 0; i < nn.m; i++){ cout << directions[nn.idx[i]]; if(i != nn.m -1) cout << " "; } cout << '\n'; return true; } if(visit[r2][c2]) continue; visit[r2][c2] = true; for(int i = 0; i < 6 ; i++){ int nr = r2 + rr[i]; int nc = c2 + cc[i]; if(checkmove(nr , nc)){ gNode nnn; nnn.r = nr; nnn.c = nc; nnn.m = nn.m + 1; nn.idx[nn.m] = i; for(int j = 0; j< nn.m + 1; j++){ nnn.idx[j] = nn.idx[j]; } ca.push(nnn); } } } return false; } int main() { cin >> k; int r1 , c1 , r2, c2; cin >> r1 >> c1 >> r2 >> c2; gNode gnode; gnode.r = r1; gnode.c = c1; gnode.m = 0; if(!solve(gnode, r2, c2)) cout << "Impossible" << '\n'; return 0; }