/** source code by coolreshab **/ #include using namespace std; #define MAX 200 #define inf 1000000000 #define mod 1000000007 #define ll long long int dir[6][2]={{-2,-1},{-2,1},{0,2},{2,1},{2,-1},{0,-2}}; int track[MAX+5][MAX+5][2],n; bool vis[MAX+5][MAX+5]; queue< pair >q; vector< pair >ans; void bfs(int sx,int sy,int dx,int dy) { memset(track,-1,sizeof(track)); q.push({sx,sy}); vis[sx][sy]=true; int xx,yy,x,y,i; while(!q.empty()) { x=q.front().first; y=q.front().second; q.pop(); for(i=0;i<6;++i) { xx=x+dir[i][0]; yy=y+dir[i][1]; if(xx>=0 and xx=0 and yy>n>>sx>>sy>>dx>>dy; bfs(sx,sy,dx,dy); while(track[dx][dy][0]!=-1) { ans.push_back({dx,dy}); x=track[dx][dy][0]; y=track[dx][dy][1]; dx=x,dy=y; } if(ans.empty()) cout<<"Impossible"; else { ans.push_back({sx,sy}); reverse(ans.begin(),ans.end()); cout<