#include using namespace std; int arr[1005][1005]; vector< pair < pair , long long > >v[1005][1005]; int m,n; const long long INF=1E9; const long long r2=140000; int vis[1005][1005]; long long dis[1005][1005]; int dis2[1005][1005]; map < pair , pair > par; #define pii pair < pair < int , int > , pair < long long,int > > struct comp { bool operator() (const pii &a, const pii &b) { if(a.second.first > b.second.first) return 1; else if(a.second.firstb.second.second) return 1; else return 0; } return 0; } }; vector < pair > vv; stack < pair > st; priority_queue < pii , vector < pii > , comp > Q; int dx[]={-2,-2,0,2,2,0}; int dy[]={-1,1,2,1,-1,-2}; string z[]={"UL","UR","R","LR","LL","L"}; int main() { int x1,y1; int x2,y2; int t; t=1; while(t--) { vv.clear(); while(!Q.empty()) Q.pop(); while(!st.empty()) st.pop(); scanf("%d",&m); n=m; n++; m++; int i,j; for(i=0;i=0&&yy>=0) v[i][j].push_back(make_pair(make_pair(xx,yy),1)); } } } } dis[x1][y1]=0; dis2[x1][y1]=0; Q.push(make_pair(make_pair(x1,y1),make_pair(0,0))); int x,y,e; long long d; int kk=0; while(!Q.empty()) { x=Q.top().first.first; y=Q.top().first.second; d=Q.top().second.first; e=Q.top().second.second; Q.pop(); if(vis[x][y]==1) continue; //printf("%d %d %lld %d->\n",x,y,d,e); int sz=v[x][y].size(); for(i=0;idis[x][y]+dd)) { dis[xx][yy]=dis[x][y]+dd; dis2[xx][yy]=++kk; par[make_pair(xx,yy)]=make_pair(x,y); Q.push(make_pair(make_pair(xx,yy),make_pair(dis[xx][yy],dis2[xx][yy]))); //printf("%d %d %lld %d\n",xx,yy,dis[xx][yy],dis2[xx][yy]); } } if(x==x2&&y==y2) break; vis[x][y]=1; } if(dis[x2][y2]==INF) printf("Impossible\n"); else { while(1) { if(x2==x1&&y2==y1) { vv.push_back(make_pair(x2,y2)); break; } vv.push_back(make_pair(x2,y2)); int x3,y3; x3=x2; y3=y2; x2=par[make_pair(x3,y3)].first; y2=par[make_pair(x3,y3)].second; } cout<<(int)vv.size()-1<=1;i--) { int x1,x2,y1,y2; x1=vv[i].first; y1=vv[i].second; x2=vv[i-1].first; y2=vv[i-1].second; for(j=0;j<6;j++) { if(x2-x1==dx[j]&&y2-y1==dy[j]){ cout<