#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int M, N, A, B;
if (!(cin >> M >> N >> A >> B)) return 0;
int total = 2 * M * N;
if (A == B) {
cout << 0 << '\n';
return 0;
}
vector<int> dist(total + 1, -1);
queue<int> q;
dist[A] = 0;
q.push(A);
while (!q.empty()) {
int v = q.front(); q.pop();
int row = (v - 1) / (2 * M);
int rem = (v - 1) % (2 * M);
int col = rem / 2;
int tri = rem % 2; // 0 or 1
// сосед в том же квадрате (парная плитка)
int base = row * (2 * M) + col * 2 + 1; // номер первой плитки в квадрате
int other = (v == base) ? base + 1 : base; // в квадрате всегда два: base и base+1
if (dist[other] == -1) {
dist[other] = dist[v] + 1;
if (other == B) { cout << dist[other] << '\n'; return 0; }
q.push(other);
}
if (tri == 0) {
// tri==0 граничит сверху (row-1, same col) и слева (same row, col-1) с tri==1
if (row > 0) {
int nb = (row - 1) * (2 * M) + col * 2 + 2; // tri==1 в квадрате выше
if (dist[nb] == -1) {
dist[nb] = dist[v] + 1;
if (nb == B) { cout << dist[nb] << '\n'; return 0; }
q.push(nb);
}
}
if (col > 0) {
int nb = row * (2 * M) + (col - 1) * 2 + 2; // tri==1 в квадрате слева
if (dist[nb] == -1) {
dist[nb] = dist[v] + 1;
if (nb == B) { cout << dist[nb] << '\n'; return 0; }
q.push(nb);
}
}
} else { // tri == 1
// tri==1 граничит снизу (row+1, same col) и справа (same row, col+1) с tri==0
if (row + 1 < N) {
int nb = (row + 1) * (2 * M) + col * 2 + 1; // tri==0 в квадрате ниже
if (dist[nb] == -1) {
dist[nb] = dist[v] + 1;
if (nb == B) { cout << dist[nb] << '\n'; return 0; }
q.push(nb);
}
}
if (col + 1 < M) {
int nb = row * (2 * M) + (col + 1) * 2 + 1; // tri==0 в квадрате справа
if (dist[nb] == -1) {
dist[nb] = dist[v] + 1;
if (nb == B) { cout << dist[nb] << '\n'; return 0; }
q.push(nb);
}
}
}
}
// если недостижимо (теоретически не должно быть при корректных входных данных)
cout << -1 << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IE0sIE4sIEEsIEI7CiAgICBpZiAoIShjaW4gPj4gTSA+PiBOID4+IEEgPj4gQikpIHJldHVybiAwOwoKICAgIGludCB0b3RhbCA9IDIgKiBNICogTjsKICAgIGlmIChBID09IEIpIHsKICAgICAgICBjb3V0IDw8IDAgPDwgJ1xuJzsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICB2ZWN0b3I8aW50PiBkaXN0KHRvdGFsICsgMSwgLTEpOwogICAgcXVldWU8aW50PiBxOwogICAgZGlzdFtBXSA9IDA7CiAgICBxLnB1c2goQSk7CgogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdiA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKICAgICAgICBpbnQgcm93ID0gKHYgLSAxKSAvICgyICogTSk7CiAgICAgICAgaW50IHJlbSA9ICh2IC0gMSkgJSAoMiAqIE0pOwogICAgICAgIGludCBjb2wgPSByZW0gLyAyOwogICAgICAgIGludCB0cmkgPSByZW0gJSAyOyAvLyAwIG9yIDEKCiAgICAgICAgLy8g0YHQvtGB0LXQtCDQsiDRgtC+0Lwg0LbQtSDQutCy0LDQtNGA0LDRgtC1ICjQv9Cw0YDQvdCw0Y8g0L/Qu9C40YLQutCwKQogICAgICAgIGludCBiYXNlID0gcm93ICogKDIgKiBNKSArIGNvbCAqIDIgKyAxOyAvLyDQvdC+0LzQtdGAINC/0LXRgNCy0L7QuSDQv9C70LjRgtC60Lgg0LIg0LrQstCw0LTRgNCw0YLQtQogICAgICAgIGludCBvdGhlciA9ICh2ID09IGJhc2UpID8gYmFzZSArIDEgOiBiYXNlOyAvLyDQsiDQutCy0LDQtNGA0LDRgtC1INCy0YHQtdCz0LTQsCDQtNCy0LA6IGJhc2Ug0LggYmFzZSsxCiAgICAgICAgaWYgKGRpc3Rbb3RoZXJdID09IC0xKSB7CiAgICAgICAgICAgIGRpc3Rbb3RoZXJdID0gZGlzdFt2XSArIDE7CiAgICAgICAgICAgIGlmIChvdGhlciA9PSBCKSB7IGNvdXQgPDwgZGlzdFtvdGhlcl0gPDwgJ1xuJzsgcmV0dXJuIDA7IH0KICAgICAgICAgICAgcS5wdXNoKG90aGVyKTsKICAgICAgICB9CgogICAgICAgIGlmICh0cmkgPT0gMCkgewogICAgICAgICAgICAvLyB0cmk9PTAg0LPRgNCw0L3QuNGH0LjRgiDRgdCy0LXRgNGF0YMgKHJvdy0xLCBzYW1lIGNvbCkg0Lgg0YHQu9C10LLQsCAoc2FtZSByb3csIGNvbC0xKSDRgSB0cmk9PTEKICAgICAgICAgICAgaWYgKHJvdyA+IDApIHsKICAgICAgICAgICAgICAgIGludCBuYiA9IChyb3cgLSAxKSAqICgyICogTSkgKyBjb2wgKiAyICsgMjsgLy8gdHJpPT0xINCyINC60LLQsNC00YDQsNGC0LUg0LLRi9GI0LUKICAgICAgICAgICAgICAgIGlmIChkaXN0W25iXSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIGRpc3RbbmJdID0gZGlzdFt2XSArIDE7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5iID09IEIpIHsgY291dCA8PCBkaXN0W25iXSA8PCAnXG4nOyByZXR1cm4gMDsgfQogICAgICAgICAgICAgICAgICAgIHEucHVzaChuYik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvbCA+IDApIHsKICAgICAgICAgICAgICAgIGludCBuYiA9IHJvdyAqICgyICogTSkgKyAoY29sIC0gMSkgKiAyICsgMjsgLy8gdHJpPT0xINCyINC60LLQsNC00YDQsNGC0LUg0YHQu9C10LLQsAogICAgICAgICAgICAgICAgaWYgKGRpc3RbbmJdID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzdFtuYl0gPSBkaXN0W3ZdICsgMTsKICAgICAgICAgICAgICAgICAgICBpZiAobmIgPT0gQikgeyBjb3V0IDw8IGRpc3RbbmJdIDw8ICdcbic7IHJldHVybiAwOyB9CiAgICAgICAgICAgICAgICAgICAgcS5wdXNoKG5iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIHRyaSA9PSAxCiAgICAgICAgICAgIC8vIHRyaT09MSDQs9GA0LDQvdC40YfQuNGCINGB0L3QuNC30YMgKHJvdysxLCBzYW1lIGNvbCkg0Lgg0YHQv9GA0LDQstCwIChzYW1lIHJvdywgY29sKzEpINGBIHRyaT09MAogICAgICAgICAgICBpZiAocm93ICsgMSA8IE4pIHsKICAgICAgICAgICAgICAgIGludCBuYiA9IChyb3cgKyAxKSAqICgyICogTSkgKyBjb2wgKiAyICsgMTsgLy8gdHJpPT0wINCyINC60LLQsNC00YDQsNGC0LUg0L3QuNC20LUKICAgICAgICAgICAgICAgIGlmIChkaXN0W25iXSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIGRpc3RbbmJdID0gZGlzdFt2XSArIDE7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5iID09IEIpIHsgY291dCA8PCBkaXN0W25iXSA8PCAnXG4nOyByZXR1cm4gMDsgfQogICAgICAgICAgICAgICAgICAgIHEucHVzaChuYik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvbCArIDEgPCBNKSB7CiAgICAgICAgICAgICAgICBpbnQgbmIgPSByb3cgKiAoMiAqIE0pICsgKGNvbCArIDEpICogMiArIDE7IC8vIHRyaT09MCDQsiDQutCy0LDQtNGA0LDRgtC1INGB0L/RgNCw0LLQsAogICAgICAgICAgICAgICAgaWYgKGRpc3RbbmJdID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzdFtuYl0gPSBkaXN0W3ZdICsgMTsKICAgICAgICAgICAgICAgICAgICBpZiAobmIgPT0gQikgeyBjb3V0IDw8IGRpc3RbbmJdIDw8ICdcbic7IHJldHVybiAwOyB9CiAgICAgICAgICAgICAgICAgICAgcS5wdXNoKG5iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyDQtdGB0LvQuCDQvdC10LTQvtGB0YLQuNC20LjQvNC+ICjRgtC10L7RgNC10YLQuNGH0LXRgdC60Lgg0L3QtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L/RgNC4INC60L7RgNGA0LXQutGC0L3Ri9GFINCy0YXQvtC00L3Ri9GFINC00LDQvdC90YvRhSkKICAgIGNvdXQgPDwgLTEgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9