#include #define UL 0 #define UR 1 #define R 2 #define LR 3 #define LL 4 #define L 5 using namespace std; int distance(int i1, int j1, int i2, int j2){ return (i1 - i2) * (i1 - i2) + (j1 - j2) * (j1 - j2); } void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { // Print the distance along with the sequence of moves. if(abs(i_start - i_end) % 2 == 1){ cout << "Impossible"; return; } int i_cur = i_start; int j_cur = j_start; vector path; while(1){ if(i_cur == i_end){ if(j_cur == j_end) break; } int cur_dis = distance(i_cur, j_cur, i_end, j_end); int i_next, j_next; int next_step, next_dis; next_step = -1; //UL i_next = i_cur - 2; j_next = j_cur - 1; next_dis = distance(i_next, j_next, i_end, j_end); if(i_next >= 0 && j_next >= 0 && i_next < n && j_next < n && next_dis < cur_dis){ next_step = UL; cur_dis = next_dis; } //UR i_next = i_cur - 2; j_next = j_cur + 1; next_dis = distance(i_next, j_next, i_end, j_end); if(i_next >= 0 && j_next >= 0 && i_next < n && j_next < n && next_dis < cur_dis){ next_step = UR; cur_dis = next_dis; } //R i_next = i_cur; j_next = j_cur + 2; next_dis = distance(i_next, j_next, i_end, j_end); if(i_next >= 0 && j_next >= 0 && i_next < n && j_next < n && next_dis < cur_dis){ next_step = R; cur_dis = next_dis; } //LR i_next = i_cur + 2; j_next = j_cur + 1; next_dis = distance(i_next, j_next, i_end, j_end); if(i_next >= 0 && j_next >= 0 && i_next < n && j_next < n && next_dis < cur_dis){ next_step = LR; cur_dis = next_dis; } //LL i_next = i_cur + 2; j_next = j_cur - 1; next_dis = distance(i_next, j_next, i_end, j_end); if(i_next >= 0 && j_next >= 0 && i_next < n && j_next < n && next_dis < cur_dis){ next_step = LL; cur_dis = next_dis; } //L i_next = i_cur; j_next = j_cur - 2; next_dis = distance(i_next, j_next, i_end, j_end); if(i_next >= 0 && j_next >= 0 && i_next < n && j_next < n && next_dis < cur_dis){ next_step = L; cur_dis = next_dis; } path.push_back(next_step); switch(next_step){ case UL : { //cout << "UL "; i_cur -= 2; j_cur --; //cout << i_cur << " "; //cout << j_cur << " " << endl; break; } case UR : { //cout << "UR "; i_cur -= 2; j_cur++; //cout << i_cur << " "; //cout << j_cur << " " << endl; break; } case R : { //cout << "R "; j_cur += 2; //cout << i_cur << " "; //cout << j_cur << " " << endl; break; } case LR : { //cout << "LR "; i_cur += 2; j_cur++; //cout << i_cur << " "; //cout << j_cur << " " << endl; break; } case LL : { //cout << "LL "; i_cur += 2; j_cur--; //cout << i_cur << " "; //cout << j_cur << " " << endl; break; } case L : { //cout << "L "; j_cur -= 2; //cout << i_cur << " "; //cout << j_cur << " " << endl; break; } } } cout << path.size() << endl; for(auto i : path){ switch(i){ case UL : cout << "UL "; break; case UR : cout << "UR "; break; case R : cout << "R "; break; case LR : cout << "LR "; break; case LL : cout << "LL "; break; case L : cout << "L "; break; } } } 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; }