#include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { int H, W; cin >> H >> W; int A, B; cin >> A >> B; A--; B--; int R1, C1, R2, C2; cin >> R1 >> C1 >> R2 >> C2; R1--; C1--; R2--; C2--; int P, Q; cin >> P >> Q; P--; Q--; int dy[4] = {1, 0, -1 ,0}; int dx[4] = {0, 1, 0, -1}; queue> q; vector> dist(H, vector (W, -1)); dist[A][B] = 0; q.push({A, B}); int ans = 0; bool fg = false; int cx=B, cy=A; if (cy >= R1 && cy <= R2 && cx >= C1 && cx <= C2) { } else { while (!q.empty()) { auto [y, x] = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int ny = y + dy[k]; int nx = x + dx[k]; if (ny < 0 || ny >= H) continue; if (nx < 0 || nx >= W) continue; if (dist[ny][nx] != -1) continue; dist[ny][nx] = dist[y][x] + 1; q.push({ny, nx}); if (ny >= R1 && ny <= R2 && nx >= C1 && nx <= C2) { cy = ny; cx = nx; ans += dist[ny][nx]; fg = true; break; } } if (fg) break; } } queue> q2; vector> dist2(H, vector (W, -1)); dist2[cy][cx] = 0; q2.push({cy, cx}); bool fg2 = false; if (cy == P && cx == Q) { } else { while (!q2.empty()) { auto [y, x] = q2.front(); q2.pop(); for (int k = 0; k < 4; k++) { int ny = y + dy[k]; int nx = x + dx[k]; if (ny < 0 || ny >= H) continue; if (nx < 0 || nx >= W) continue; if (dist2[ny][nx] != -1) continue; dist2[ny][nx] = dist2[y][x] + 1; q2.push({ny, nx}); if (ny == P && nx == Q) { cy = P; cx = Q; ans += dist2[ny][nx]; fg2 = true; } } if (fg2) break; } } queue> q3; vector> dist3(H, vector (W, -1)); dist3[cy][cx] = 0; q3.push({cy, cx}); bool fg3 = false; if (cy == A && cx == B) { } else { while (!q3.empty()) { auto [y, x] = q3.front(); q3.pop(); for (int k = 0; k < 4; k++) { int ny = y + dy[k]; int nx = x + dx[k]; if (ny < 0 || ny >= H) continue; if (nx < 0 || nx >= W) continue; if (dist3[ny][nx] != -1) continue; dist3[ny][nx] = dist3[y][x] + 1; q3.push({ny, nx}); if (ny == A && nx == B) { cy = A; cx = B; ans += dist3[ny][nx]; fg3 = true; } } if (fg3) break; } } cout << ans << endl; return 0; }