#include #include #include using namespace std; using namespace atcoder; using ll = long long; //#define endl "\n"; const vector dx = {1, 0, -1, 0}; const vector dy = {0, 1, 0, -1}; queue> que; ll visitedAB[209][209]; ll visitedPQ[209][209]; ll H, W; ll A, B; ll r1,r2,c1,c2; ll P, Q; int main(){ cin >> H >> W; cin >> A >> B; A--, B--; cin >> r1 >> c1 >> r2 >> c2; r1--, r2--, c1--, c2--; cin >> P >> Q; P--, Q--; for(int i = 0; i < H; i++){ for(int j = 0; j < W; j++){ visitedAB[i][j] = -1; } } visitedAB[A][B] = 0; que.push({A, B}); while(que.size() > 0){ auto [h, w] = que.front(); que.pop(); for(int k = 0; k < 4; k++){ if(h + dy[k] < 0 || H <= h + dy[k]) continue; if(w + dx[k] < 0 || W <= w + dx[k]) continue; if(visitedAB[h + dy[k]][w + dx[k]] == -1){ visitedAB[h + dy[k]][w + dx[k]] = visitedAB[h][w] + 1; que.push({h + dy[k], w + dx[k]}); } } } for(int i = 0; i < H; i++){ for(int j = 0; j < W; j++){ visitedPQ[i][j] = -1; } } visitedPQ[P][Q] = 0; que.push({P, Q}); while(que.size() > 0){ auto [h, w] = que.front(); que.pop(); for(int k = 0; k < 4; k++){ if(h + dy[k] < 0 || H <= h + dy[k]) continue; if(w + dx[k] < 0 || W <= w + dx[k]) continue; if(visitedPQ[h + dy[k]][w + dx[k]] == -1){ visitedPQ[h + dy[k]][w + dx[k]] = visitedPQ[h][w] + 1; que.push({h + dy[k], w + dx[k]}); } } } ll ans = 1e9; ll ABPQ = abs(A - P) + abs(B - Q); for(int i = r1; i <= r2; i++){ for(int j = c1; j <= c2; j++){ ans = min(ans, visitedAB[i][j] + visitedPQ[i][j] + ABPQ); } } cout << ans << endl; return 0; }