#include #define mp make_pair #define ff first #define ss second using namespace std; string s[201][201]; int dp[201][201]; int xsa, ysa, xea, yea, na; int movex[] = {-2, -2, 0, 2, 2, 0}; int movey[] = {-1, 1, 2, 1, -1, -2}; string moves[] = {"UL", "UR", "R", "LR", "LL", "L"}; bool check(int xb, int yb) { if(xb >= 0 && xb < na && yb >= 0 && yb < na) return 1; return 0; } int main() { int i, j; cin >> na; cin >> xsa >> ysa >> xea >> yea; queue > > Q; Q.push(mp("", mp(xsa, ysa))); for(i = 0; i < na; i++) for(j = 0; j < na; j++) dp[i][j] = 1e9; dp[xsa][ysa] = 0; while(!Q.empty()) { string st = Q.front().ff; int xb = Q.front().ss.ff; int yb = Q.front().ss.ss; Q.pop(); s[xb][yb] = st; if(xb == xea && yb == yea) { cout << dp[xb][yb] << '\n'; string p[1001]; int mc = 0; while(xb != xsa || yb != ysa) { mc++; p[mc] = s[xb][yb]; for(i = 0; i < 6; i++) if(moves[i] == s[xb][yb]) { xb -= movex[i]; yb -= movey[i]; break; } } for(i = mc; i >= 1; i--) cout << p[i] << ' '; return 0; } for(i = 0; i < 6; i++){ int xxb = xb + movex[i]; int yyb = yb + movey[i]; if(dp[xxb][yyb] > dp[xb][yb] + 1 && check(xxb, yyb)) { dp[xxb][yyb] = dp[xb][yb] + 1; Q.push(mp(moves[i], mp(xxb, yyb))); } } } cout << "Impossible"; return 0; }