#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long #define forn(i,n)for(i=0;i LST; typedef vector VEC; typedef map MAP; struct node { int x; int y; string dir; node() { } node(int xc, int yc, string dirc) { x = xc; y = yc; dir = dirc; } }; bool operator < (const node& n1, const node n2) { return make_pair(n1.x,n1.y) > vc; vector > visited; queue qu; mapparent; int main() { ifstream fin("Text.txt"); ios_base::sync_with_stdio(false); cin.tie(0); ll i, j, q; ll n, m, p, k, t; ll a, b, c, d; ll y, z, x; ll one = 1, zero = 0, ans = 0; ll l, r; string st; char ch; cin >> n; vc.resize(n + 2, vector(n + 2,1)); visited.resize(n + 2, vector(n + 2)); forn(i, n+2) { vc[i][0] = vc[i][n + 1] = vc[0][i] = vc[n + 1][i] = 0; } cin >> a >> b >> c >> d; a++; b++; c++; d++; node cur(0,0,"X"); qu.push(node(a,b,"X")); visited[a][b] = 1; listpathv; while (!qu.empty()) { cur = qu.front(); qu.pop(); if (cur.x == c && cur.y == d) { while (cur.dir != "X") { pathv.push_front(cur); cur = parent[cur]; } cout << pathv.size() << endl; list::iterator it = pathv.begin(); while (it != pathv.end()) { cout << it->dir << " "; it++; } return 0; } if (cur.x - 2 > 0 && cur.y - 1 > 0 && !visited[cur.x - 2][cur.y - 1]) { visited[cur.x - 2][cur.y - 1] = 1; node nn(cur.x - 2, cur.y - 1, "UL"); parent[nn] = cur; qu.push(nn); } if (cur.x - 2 > 0 && cur.y + 1 < n + 1 && !visited[cur.x - 2][cur.y + 1]) { visited[cur.x - 2][cur.y + 1] = 1; node nn(cur.x - 2, cur.y + 1, "UR"); parent[nn] = cur; qu.push(nn); } if (cur.x > 0 && cur.y + 2 < n + 1 && !visited[cur.x][cur.y + 2]) { visited[cur.x][cur.y + 2] = 1; node nn(cur.x, cur.y + 2, "R"); parent[nn] = cur; qu.push(nn); } if (cur.x + 2 < n + 1 && cur.y + 1 < n + 1 && !visited[cur.x + 2][cur.y + 1]) { visited[cur.x + 2][cur.y + 1] = 1; node nn(cur.x + 2, cur.y + 1, "LR"); parent[nn] = cur; qu.push(nn); } if (cur.x + 2 < n + 1 && cur.y - 1 > 0 && !visited[cur.x + 2][cur.y - 1]) { visited[cur.x + 2][cur.y - 1] = 1; node nn(cur.x + 2, cur.y - 1, "LL"); parent[nn] = cur; qu.push(nn); } if (cur.x> 0 && cur.y - 2 > 0 && !visited[cur.x][cur.y - 2]) { visited[cur.x][cur.y - 2] = 1; node nn(cur.x, cur.y - 2, "L"); parent[nn] = cur; qu.push(nn); } } cout << "Impossible" << endl; return 0; }