#include #define eb emplace_back #define pb push_back #define mp make_pair #define fi first #define se second #define INF 0x3f3f3f3f using namespace std; typedef long long ll; typedef pair pii; typedef vector vi; const int N = 220; int dx[6] = {-2, -2, 0, 2, 2, 0}; int dy[6] = {-1, 1, 2, 1, -1, -2}; int dist[N][N], pdir[N][N]; pii pai[N][N]; string str[6] = {"UL", "UR", "R", "LR", "LL", "L"}; void printMove(int x, int y, int i, int j) { if (x == i and y == j) return ; printMove(x, y, pai[i][j].fi, pai[i][j].se); cout << str[pdir[i][j]] << " "; } void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { memset (dist, INF, sizeof dist); dist[i_start][j_start] = 0; queue q; q.emplace(i_start, j_start); while (!q.empty()) { pii par = q.front(); q.pop(); for (int k = 0; k < 6; k++) { int x = par.fi + dx[k], y = par.se + dy[k]; if (x < 0 or x >= n or y < 0 or y >= n or dist[x][y] != INF) continue; dist[x][y] = dist[par.fi][par.se] + 1; pai[x][y] = par; pdir[x][y] = k; q.emplace(x, y); } } if (dist[i_end][j_end] == INF) { printf("Impossible\n"); exit(0); } printf("%d\n", dist[i_end][j_end]); printMove(i_start, j_start, i_end, j_end); cout << endl; } int main() { int n; cin >> n; int i_start; int j_start; int i_end; int j_end; cin >> i_start >> j_start >> i_end >> j_end; printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }