#include using namespace std; int main(){ cin.tie(nullptr)->ios::sync_with_stdio(false); int H,W,A,B; cin>>H>>W>>A>>B; int R1,C1,R2,C2; cin>>R1>>C1>>R2>>C2; int P,Q; cin>>P>>Q; A--,B--,R1--,C1--,R2--,C2--,P--,Q--; // 場外判定 auto outof = [&](unsigned int y, unsigned int x){ return (y >= H || x >= W); }; // 4方向の近傍 UDLR const int dy[4] = {-1, 1, 0, 0}; const int dx[4] = {0, 0, -1, 1}; const int INF=1<<30; int ans=INF; auto bfs=[&](int i,int j){ vector dist(H,vector(W,INF)); dist[i][j]=0; queue> que; que.push({i,j}); while(que.size()){ auto [y,x]=que.front(); que.pop(); for(int d=0;d<4;d++){ uint ny=y+dy[d],nx=x+dx[d]; if(outof(ny,nx)) continue; if(dist[ny][nx]>dist[y][x]+1){ dist[ny][nx]=dist[y][x]+1; que.push({ny,nx}); } } } return dist; }; for(int i=R1;i<=R2;i++){ auto dist1=bfs(i,C1); ans=min(ans,dist1[A][B]+dist1[P][Q]); auto dist2=bfs(i,C2); ans=min(ans,dist2[A][B]+dist2[P][Q]); } for(int j=C1;j<=C2;j++){ auto dist1=bfs(R1,j); ans=min(ans,dist1[A][B]+dist1[P][Q]); auto dist2=bfs(R2,j); ans=min(ans,dist2[A][B]+dist2[P][Q]); } auto dist=bfs(A,B); cout<