#include <bits/stdc++.h>
using namespace std;
// ทิศทางการเคลื่อนที่ทั้งหมดที่เป็นไปได้ของ knight
int dx[] = {2, 1, -1, -2, -2, -1, 1, 2};
int dy[] = {1, 2, 2, 1, -1, -2, -2, -1};
int min_no_of_jumps(int n, int m, char **board, int sx, int sy, int tx, int ty) {
if (board[sx][sy] == '#')
return -1;
// สร้างตารางขนาด n*m ไว้เพื่อจดระยะทางจากจุดเริ่มต้น
// ตอนแรกกำหนดให้เป็น -1 เพื่อระบุว่ายังไม่เคยไปยัง node นั้น
vector<vector<int>> dist(n, vector<int>(m, -1));
// Breadth-first Search
queue<pair<int, int>> Q;
dist[sx][sy] = 0;
Q.push({sx, sy});
while (!Q.empty()) {
int ux = Q.front().first, uy = Q.front().second;
Q.pop();
// กระจายไปยัง node ตามรูปแบบการเดินของ knight 8 ทิศที่เป็นไปได้
for (int dir = 0; dir < 8; ++dir) {
int vx = ux+dx[dir], vy = uy+dy[dir];
// สามารถเดินไปได้ก็ต่อเมื่อ ไม่ออกนอกขอบตาราง และต้องไม่เดินไปยังช่องที่ห้ามเหยียบ (และจะไม่ BFS ไปยัง node ที่เคยไปแล้ว)
if (vx >= 0 && vx < n && vy >= 0 && vy < m && board[vx][vy] != '#' && dist[vx][vy] == -1) {
dist[vx][vy] = dist[ux][uy]+1;
Q.push({vx, vy});
}
}
}
return dist[tx][ty];
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
char **B = new char*[n];
for (int i = 0; i < n; ++i) {
B[i] = new char[m+1];
scanf(" %s", B[i]);
assert(strlen(B[i]) == m);
for (int j = 0; j < m; ++j)
assert(B[i][j] == '.' || B[i][j] == '#');
}
int sx, sy, tx, ty;
scanf("%d%d%d%d", &sx, &sy, &tx, &ty);
assert(sx >= 0 && sx < n && sy >= 0 && sy < m);
assert(tx >= 0 && tx < n && ty >= 0 && ty < m);
printf("%d\n", min_no_of_jumps(n, m, B, sx, sy, tx, ty));
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyDguJfguLTguKjguJfguLLguIfguIHguLLguKPguYDguITguKXguLfguYjguK3guJnguJfguLXguYjguJfguLHguYnguIfguKvguKHguJTguJfguLXguYjguYDguJvguYfguJnguYTguJvguYTguJTguYnguILguK3guIcga25pZ2h0CmludCBkeFtdID0gezIsIDEsIC0xLCAtMiwgLTIsIC0xLCAxLCAyfTsKaW50IGR5W10gPSB7MSwgMiwgMiwgMSwgLTEsIC0yLCAtMiwgLTF9OwoKaW50IG1pbl9ub19vZl9qdW1wcyhpbnQgbiwgaW50IG0sIGNoYXIgKipib2FyZCwgaW50IHN4LCBpbnQgc3ksIGludCB0eCwgaW50IHR5KSB7CiAgICBpZiAoYm9hcmRbc3hdW3N5XSA9PSAnIycpCiAgICAgICAgcmV0dXJuIC0xOwogICAgLy8g4Liq4Lij4LmJ4Liy4LiH4LiV4Liy4Lij4Liy4LiH4LiC4LiZ4Liy4LiUIG4qbSDguYTguKfguYnguYDguJ7guLfguYjguK3guIjguJTguKPguLDguKLguLDguJfguLLguIfguIjguLLguIHguIjguLjguJTguYDguKPguLTguYjguKHguJXguYnguJkKICAgIC8vIOC4leC4reC4meC5geC4o+C4geC4geC4s+C4q+C4meC4lOC5g+C4q+C5ieC5gOC4m+C5h+C4mSAtMSDguYDguJ7guLfguYjguK3guKPguLDguJrguLjguKfguYjguLLguKLguLHguIfguYTguKHguYjguYDguITguKLguYTguJvguKLguLHguIcgbm9kZSDguJnguLHguYnguJkKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlzdChuLCB2ZWN0b3I8aW50PihtLCAtMSkpOwogICAgLy8gQnJlYWR0aC1maXJzdCBTZWFyY2gKICAgIHF1ZXVlPHBhaXI8aW50LCBpbnQ+PiBROwogICAgZGlzdFtzeF1bc3ldID0gMDsKICAgIFEucHVzaCh7c3gsIHN5fSk7CiAgICB3aGlsZSAoIVEuZW1wdHkoKSkgewogICAgICAgIGludCB1eCA9IFEuZnJvbnQoKS5maXJzdCwgdXkgPSBRLmZyb250KCkuc2Vjb25kOwogICAgICAgIFEucG9wKCk7CiAgICAgICAgLy8g4LiB4Lij4Liw4LiI4Liy4Lii4LmE4Lib4Lii4Lix4LiHIG5vZGUg4LiV4Liy4Lih4Lij4Li54Lib4LmB4Lia4Lia4LiB4Liy4Lij4LmA4LiU4Li04LiZ4LiC4Lit4LiHIGtuaWdodCA4IOC4l+C4tOC4qOC4l+C4teC5iOC5gOC4m+C5h+C4meC5hOC4m+C5hOC4lOC5iQogICAgICAgIGZvciAoaW50IGRpciA9IDA7IGRpciA8IDg7ICsrZGlyKSB7CiAgICAgICAgICAgIGludCB2eCA9IHV4K2R4W2Rpcl0sIHZ5ID0gdXkrZHlbZGlyXTsKICAgICAgICAgICAgLy8g4Liq4Liy4Lih4Liy4Lij4LiW4LmA4LiU4Li04LiZ4LmE4Lib4LmE4LiU4LmJ4LiB4LmH4LiV4LmI4Lit4LmA4Lih4Li34LmI4LitIOC5hOC4oeC5iOC4reC4reC4geC4meC4reC4geC4guC4reC4muC4leC4suC4o+C4suC4hyDguYHguKXguLDguJXguYnguK3guIfguYTguKHguYjguYDguJTguLTguJnguYTguJvguKLguLHguIfguIrguYjguK3guIfguJfguLXguYjguKvguYnguLLguKHguYDguKvguKLguLXguKLguJogKOC5geC4peC4sOC4iOC4sOC5hOC4oeC5iCBCRlMg4LmE4Lib4Lii4Lix4LiHIG5vZGUg4LiX4Li14LmI4LmA4LiE4Lii4LmE4Lib4LmB4Lil4LmJ4LinKQogICAgICAgICAgICBpZiAodnggPj0gMCAmJiB2eCA8IG4gJiYgdnkgPj0gMCAmJiB2eSA8IG0gJiYgYm9hcmRbdnhdW3Z5XSAhPSAnIycgJiYgZGlzdFt2eF1bdnldID09IC0xKSB7CiAgICAgICAgICAgICAgICBkaXN0W3Z4XVt2eV0gPSBkaXN0W3V4XVt1eV0rMTsKICAgICAgICAgICAgICAgIFEucHVzaCh7dngsIHZ5fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZGlzdFt0eF1bdHldOwp9CgoKaW50IG1haW4oKQp7CiAgICBpbnQgbiwgbTsKICAgIHNjYW5mKCIlZCVkIiwgJm4sICZtKTsKICAgIGNoYXIgKipCID0gbmV3IGNoYXIqW25dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBCW2ldID0gbmV3IGNoYXJbbSsxXTsKICAgICAgICBzY2FuZigiICVzIiwgQltpXSk7CiAgICAgICAgYXNzZXJ0KHN0cmxlbihCW2ldKSA9PSBtKTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07ICsraikKICAgICAgICAgICAgYXNzZXJ0KEJbaV1bal0gPT0gJy4nIHx8IEJbaV1bal0gPT0gJyMnKTsKICAgIH0KICAgIGludCBzeCwgc3ksIHR4LCB0eTsKICAgIHNjYW5mKCIlZCVkJWQlZCIsICZzeCwgJnN5LCAmdHgsICZ0eSk7CiAgICBhc3NlcnQoc3ggPj0gMCAmJiBzeCA8IG4gJiYgc3kgPj0gMCAmJiBzeSA8IG0pOwogICAgYXNzZXJ0KHR4ID49IDAgJiYgdHggPCBuICYmIHR5ID49IDAgJiYgdHkgPCBtKTsKICAgIHByaW50ZigiJWRcbiIsIG1pbl9ub19vZl9qdW1wcyhuLCBtLCBCLCBzeCwgc3ksIHR4LCB0eSkpOwoKICAgIHJldHVybiAwOwp9