#include using namespace std; void right_down(int *i_start,int *j_start) { *i_start++; *j_start++; } void right_up(int *i_start,int *j_start) { *i_start++; *j_start--; } void left_down(int *i_start,int *j_start) { *i_start--; *j_start++; } void left_up(int *i_start,int *j_start) { *i_start--; *j_start--; } void right(int *j_start) { *j_start+=2; } void left(int *j_start) { *j_start-=2; } int direct(int i_start, int j_start, int i_end, int j_end) { int m; if(i_start-i_end>0) m=0; else m=1; m*=10; if(j_start-j_end>0) m+=1; else m+=0; return m; } void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { float m=i_end-i_start; float no=j_end-j_start; char res[100][2]; if((i_start%2!=i_end%2)||i_start>=n||i_start<0||j_start>=n||j_start<0||i_end>=n||i_end<0||j_end>=n||j_end<0) cout<<"Impossible"; else if(((m/4-int(m/4))||(no/2-int(no/2)))||((m/2-int(m/2))||0)) cout<<"Impossible"; else { int count=0; int temp; while(i_start-i_end) { temp=direct(i_start,j_start,i_end,j_end); switch(temp) { case 0:left_up(&i_start,&j_start); strcpy(res[count++],"UL"); break; case 1:right_up(&i_start,&j_start); strcpy(res[count++],"UR"); break; case 10:if(j_end-j_start>i_end-i_start) { right(&j_start); strcpy(res[count++],"R"); } else { right_down(&i_start,&j_start); strcpy(res[count++],"LR"); } break; case 11:left_down(&i_start,&j_start); strcpy(res[count++],"LL"); } } if((i_start==i_end)&&(j_start!=j_end)) { int fin,i; if(j_start-j_end>0) { fin=(j_start-j_end)/2; for(i=0;i> 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; }