#if __has_include() #include #else #include #include #endif using namespace std; #define rep(i, n) for (long long i = 0; i < (long long)(n); i++) #define printYesNo(is_ok) puts(is_ok ? "Yes" : "No") #define SORT(v) sort(v.begin(), v.end()) #define RSORT(v) sort(v.rbegin(), v.rend()) #define REVERSE(v) reverse(v.begin(), v.end()) template void printVector(const Container &v, char delimiter = ' ') { for (auto itr = v.begin(); itr != v.end(); itr++) { if (itr != v.begin()) { cout << delimiter; } cout << *itr; } cout << endl; } template void printlnVector(const Container &v) { printVector(v, '\n'); } int dist(int h1, int w1, int h2, int w2) { return abs(h1 - h2) + abs(w1 - w2); } void solve() { 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; int ans = 0; if (R1 <= A && A <= R2 && C1 <= B && C2 <= B) { // 初期値が死骸内 } else if (R1 <= A && A <= R2) { // 初期値が死骸の横範囲 long long score1 = dist(A, B, A, C1) + dist(A, C1, P, Q); long long score2 = dist(A, B, A, C2) + dist(A, C2, P, Q); ans += min(score1, score2); } else if (C1 <= B && B <= C2) { // 初期値が死骸の縦範囲 long long score1 = dist(A, B, R1, B) + dist(R1, B, P, Q); long long score2 = dist(A, B, R2, B) + dist(R2, B, P, Q); ans += min(score1, score2); } else { // 死骸の四方のどこか long long score1 = dist(A, B, R1, C1) + dist(R1, C1, P, Q); long long score2 = dist(A, B, R1, C2) + dist(R1, C2, P, Q); long long score3 = dist(A, B, R2, C1) + dist(R2, C1, P, Q); long long score4 = dist(A, B, R2, C2) + dist(R2, C2, P, Q); ans += min({score1, score2, score3, score4}); // cout << score1 << ", " << score2 << ", " << score3 << ", " << score4 << endl; } // ゴミ箱から初期位置 ans += dist(P, Q, A, B); cout << ans << endl; } int main() { int T = 1; // cin >> T; while (T--) { solve(); } return 0; }