#define _CRT_SECURE_NO_WARNINGS #define TASK "experimental" #pragma comment(linker, "/STACK:2010886400") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int MOD = 1000000007; const int INF = 1000000001; const long double EPS = 1e-15; const int HASH_POW = 29; const long double PI = acos(-1.0); mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); long long rndNext(long long l, long long r) { uniform_int_distribution foo(l, r); return foo(rnd); } double workTime() { return double(clock()) / CLOCKS_PER_SEC; } void myReturn(int code = 0) { #ifdef MYDEBUG cout << "\nTime = " << fixed << setprecision(3) << workTime() << endl; #endif exit(code); } const int dx[6] = { -2, -2, 0, 2, 2, 0 }, dy[6] = { -1, 1, 2, 1, -1, -2 }; const string dir[6] = { "UL", "UR", "R", "LR", "LL", "L" }; int n, sx, sy, ex, ey; int d[210][210]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); #ifdef MYDEBUG freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else /*freopen(TASK".in", "r", stdin); freopen(TASK".out", "w", stdout);*/ #endif cin >> n; cin >> sx >> sy; cin >> ex >> ey; memset(d, -1, sizeof d); d[ex][ey] = 0; queue > Q; Q.push({ ex, ey }); while (!Q.empty()) { int x = Q.front().first, y = Q.front().second; Q.pop(); for (int i = 0; i < 6; ++i) { int newX = x + dx[i], newY = y + dy[i]; if (0 <= newX && newX < n && 0 <= newY && newY < n && d[newX][newY] == -1) { d[newX][newY] = d[x][y] + 1; Q.push({ newX, newY }); } } } if (d[sx][sy] == -1) { cout << "Impossible\n"; myReturn(); } cout << d[sx][sy] << endl; while (sx != ex || sy != ey) { for (int i = 0; i < 6; ++i) { int newX = sx + dx[i], newY = sy + dy[i]; if (0 <= newX && newX < n && 0 <= newY && newY < n && d[newX][newY] == d[sx][sy] - 1) { cout << dir[i] << " "; sx = newX; sy = newY; break; } } } myReturn(); }