// author: gary #include using namespace std; #define ALL(x) (x).begin(), (x).end() #define SZ(x) ( (int) (x).size() ) #define DBG(x) do { std::cerr << #x << ": " << x << std::endl; } while (0) typedef pair pii; typedef long long ll; template bool cmax(T& a, T b) { if(a < b) { a = b; return true; } return false; } template bool cmin(T& a, T b) { if(a > b) { a = b; return true; } return false; } const int N = 222; int dist[N][N]; pair from[N][N]; int n; int sx, sy, tx, ty; int dx[] = {-2, -2, 0, 2, 2, 0}; int dy[] = {-1, 1, 2, 1, -1, -2}; vector name = {"UL", "UR", "R", "LR", "LL", "L"}; queue q; int main() { scanf("%d%d%d%d%d", &n, &sx, &sy, &tx, &ty); memset(dist, -1, sizeof dist); dist[sx][sy] = 0; q.push({sx, sy}); while(!q.empty()) { pii t = q.front(); q.pop(); int x = t.first, y = t.second; for(int d = 0; d < 6; d++) { int nx = x + dx[d]; int ny = y + dy[d]; if(nx >= 0 && nx < n && ny >= 0 && ny < n && dist[nx][ny] == -1) { dist[nx][ny] = dist[x][y] + 1; from[nx][ny] = {d, {x, y}}; q.push({nx, ny}); } } } if(dist[tx][ty] == -1) { puts("Impossible"); } else { printf("%d\n", dist[tx][ty]); vector p; while(tx != sx || ty != sy) { pii nxt = from[tx][ty].second; p.push_back(name[from[tx][ty].first]); tx = nxt.first; ty = nxt.second; } reverse(ALL(p)); int space = 0; for(string m: p) { if(space++ > 0) putchar(' '); printf("%s", m.c_str()); } puts(""); } return 0; }