#include using namespace std; struct pos{ int r, c; pos(){ r=-1; c=-1; } pos(int i,int j){ r=i; c=j; } }; bool check(int r,int c,int n){ return (r>=0 && c>=0 && r>&par,vector&path,int r,int c){ if(par[r][c].r!=-1){ find_path(par,path,par[r][c].r,par[r][c].c); } path.push_back(pos(r,c)); } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int n; cin>>n; vector>vis(n,vector(n,false)); vector>par(n,vector(n)); vector>dis(n,vector(n,-1)); int ur,uc,vr,vc; cin>>ur>>uc>>vr>>vc; dis[ur][uc]=0; vis[ur][uc]=true; par[ur][uc]=pos(-1,-1); queueq; q.push(pos(ur,uc)); while(!q.empty()){ int r,c,rr,cc; r=q.front().r; c=q.front().c; q.pop(); rr=r-2;cc=c-1; if(check(rr,cc,n) && !vis[rr][cc]){ vis[rr][cc]=true; par[rr][cc]=pos(r,c); dis[rr][cc]=1+dis[r][c]; q.push(pos(rr,cc)); } rr=r-2;cc=c+1; if(check(rr,cc,n) && !vis[rr][cc]){ vis[rr][cc]=true; par[rr][cc]=pos(r,c); dis[rr][cc]=1+dis[r][c]; q.push(pos(rr,cc)); } rr=r;cc=c+2; if(check(rr,cc,n) && !vis[rr][cc]){ vis[rr][cc]=true; par[rr][cc]=pos(r,c); dis[rr][cc]=1+dis[r][c]; q.push(pos(rr,cc)); } rr=r+2;cc=c+1; if(check(rr,cc,n) && !vis[rr][cc]){ vis[rr][cc]=true; par[rr][cc]=pos(r,c); dis[rr][cc]=1+dis[r][c]; q.push(pos(rr,cc)); } rr=r+2;cc=c-1; if(check(rr,cc,n) && !vis[rr][cc]){ vis[rr][cc]=true; par[rr][cc]=pos(r,c); dis[rr][cc]=1+dis[r][c]; q.push(pos(rr,cc)); } rr=r;cc=c-2; if(check(rr,cc,n) && !vis[rr][cc]){ vis[rr][cc]=true; par[rr][cc]=pos(r,c); dis[rr][cc]=1+dis[r][c]; q.push(pos(rr,cc)); } } //cout<path; find_path(par,path,vr,vc); cout<