#include #include #include #include #include using namespace std; const int MAXN = 210; const int INF = 0x3f3f3f3f; const int dx[] = {-2, -2, 0, 2, 2, 0}; const int dy[] = {-1, 1, 2, 1, -1, -2}; const char *d[] = {"UL", "UR", "R", "LR", "LL", "L"}; int _w; int n, sx, sy, tx, ty; int revdir( int dir ) { return (dir + 3) % 6; } int inside( int x, int y ) { return x >= 0 && x < n && y >= 0 && y < n; } int dis[MAXN][MAXN], dir[MAXN][MAXN]; queue qx, qy; void bfs() { memset(dis, 0x3f, sizeof dis); dis[tx][ty] = 0, dir[tx][ty] = -1; qx.push(tx), qy.push(ty); while( !qx.empty() ) { int x = qx.front(); qx.pop(); int y = qy.front(); qy.pop(); for( int i = 0; i < 6; ++i ) { int nx = x + dx[i]; int ny = y + dy[i]; if( !inside(nx, ny) ) continue; if( dis[x][y] + 1 < dis[nx][ny] ) { dis[nx][ny] = dis[x][y] + 1; dir[nx][ny] = revdir(i); qx.push(nx), qy.push(ny); } else if( dis[x][y] + 1 == dis[nx][ny] && revdir(i) < dir[nx][ny] ) { dir[nx][ny] = revdir(i); } } } } stack stkx, stky; void print() { if( dis[sx][sy] == INF ) return (void)puts("Impossible"); printf( "%d\n", dis[sx][sy] ); int x = sx, y = sy; while( dir[x][y] != -1 ) { int dr = dir[x][y]; printf( "%s ", d[dr] ); x += dx[dr], y += dy[dr]; } } int main() { _w = scanf( "%d%d%d%d%d", &n, &sx, &sy, &tx, &ty ); bfs(), print(); return 0; }