#include #define X first #define Y second #define eb push_back #define siz(a) int(a.size()) #define endl "\n" #define trace2(x, y) cout <<#x<<": "< vi; typedef vector < ll > vll; const int mod=1e9+7; const int maxn=1e6+5; /* finding inverse upto n * for i in xrange(2, N): ifc[i] = -(mod / i) * ifc[mod % i] % mod * */ ll power(ll base, ll exp){ll res = 1; while(exp){if(exp%2)res*=base;base*=base;res%=mod;base%=mod;exp/=2;}return res;} int n, sx, sy, ex, ey; vector ans; vector temp; void dfs(int i, int j, int curr){ if(i == ex && j == ey){ if(siz(ans) == 0){ ans = temp; } else{ if(siz(ans) > siz(temp)){ ans = temp; } } } } int dx[] = {-2, -2, 0, 2, 2 , 0}; int dy[] = {-1 , 1, 2, 1, -1, -2}; int visit[300][300]; bool check(int x, int y){ if(x >= 0 && x < n && y >= 0 && y < n && visit[x][y] == -1) return 1; return 0; } void bfs(){ queue > q; q.push({sx, sy}); while(!q.empty()){ int x = q.front().X, y = q.front().Y; //trace3(x, y, visit[x][y]); q.pop(); if(x == ex && y == ey) return ; for(int i = 0; i<6; i++){ int nx = x+dx[i], ny = y+dy[i]; if(check(nx, ny)){ // trace5(x, y, nx, ny, i); visit[nx][ny] = i; q.push({nx, ny}); } } } } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL); //freopen("input.in", "r", stdin);freopen("output.out", "w", stdout); cin >> n; cin >> sx >> sy >> ex >> ey; memset(visit, -1, sizeof(visit)); bfs(); vll v; if(visit[ex][ey] != -1){ while(ex != sx || ey != sy){ v.eb(visit[ex][ey]); int x = ex, y = ey; // trace3(x, y, visit[x][y]); ex = ex - dx[visit[x][y]]; ey = ey - dy[visit[x][y]]; } sort(v.begin(), v.end()); cout << siz(v) << endl; for(auto i : v){ if(i == 0){ cout << "UL"; } if(i == 1) cout << "UR"; if(i == 2) cout << "R"; if(i == 3) cout << "LR"; if(i == 4) cout << "LL"; if(i == 5) cout << "L"; cout << " "; } } else{ cout << "Impossible"; } /* if(abs(sx - ex)%2){ cout << "Impossible"; } else{ int up = abs(sx - ex)/2; if(up%2){ if(abs(sy - ey)%2 == 0){ cout << "Impossible"; } else{ int side = abs(sy - ey); if(side > 2*up){ if(sx > ex){ if(ey - sy > 0){ while(side != 2*up){ cout << "R"; side--; } } while(sx != ex){ if(ey - sy > 0){ cout << "LR"; } else{ cout << "LL"; } sx++; side--; } while(side > 0){ cotu << "L"; side--; } } else{ while(sx != ex){ if(ey - sy > 0){ cout << "UR"; } else{ cout << "UL"; } sx++; side--; } if(ey - sy > 0){ while(side > 0){ cout << "R"; side--; } } else{ while(side > 0){ cotu << "L"; side--; } } } } else{ int times = up - side; if(sx > ex){ if(ey - sy > 0){ } while(sx != ex){ if(ey - sy > 0){ cout << "LR"; } else{ cout << "LL"; } sx++; side--; } } else{ while(sx != ex){ if(ey - sy > 0){ cout << "UR"; } else{ cout << "UL"; } sx++; side--; } } } } } else{ if(abs(sy - ey)%2){ cout << "Impossible"; } else{ int side = abs(sy - ey); } } } */ return 0; }