#include<stdio.h>
#include<set>
#include<vector>
#include<deque>
using namespace std;
struct xy {
int x[2], w;
bool operator<(const xy p)const {
if (x[0] != p.x[0])return x[0] < p.x[0];
if (x[1] != p.x[1])return x[1] < p.x[1];
return w < p.w;
}
}a[121212];
set<xy>S[4];
int NT[121212][4], dist[121212][4];
int min(int a, int b) { if (a == -1)return b; if (a < b)return a; return b; }
int main() {
int n, i, j;
scanf("%d", &n);
n += 2;
for (i = 0; i < n; i++) scanf("%d%d", &a[i].x[0], &a[i].x[1]);
for (i = 0; i < n; i++) for (j = 0; j < 4; j++)NT[i][j] = dist[i][j] = -1;
for (i = 0; i < 4; i++) for (j = 0; j < n; j++) S[i].insert({ { a[j].x[i % 2],((i / 2) * 2 - 1) * a[j].x[!(i % 2)] },j });
for (i = 0; i < 4; i++) {
set<xy>::iterator it, next;
for (it = S[i].begin();;) {
next = it;next++;
if (next == S[i].end())break;
if (it->x[0] == next->x[0]) NT[it->w][i] = next->w;
it = next;
}
}
deque<int>Qx[2], Qy[2];
for (i = 0; i < 4; i++)if(NT[0][i]!=-1)Qx[0].push_back(0), Qy[0].push_back(i),dist[0][i]=0;
int now = 0;
while (!Qx[0].empty()||!Qx[1].empty()) {
if (Qx[now].empty())now=!now;
int nowx = Qx[now].front(); Qx[now].pop_front();
int nowy = Qy[now].front(); Qy[now].pop_front();
for (i = -1; i <= 1; i++) {
int ny = (nowy + i + 4) % 4;
int nx = NT[nowx][nowy];
if (nx == 1)
int sp = 1;
if (nx == -1 || dist[nx][ny] != -1)continue;
Qx[now^(!!i)].push_back(nx), Qy[now^(!!i)].push_back(ny);
dist[nx][ny] = dist[nowx][nowy] + !!i;
}
}
int ans = -1;
for (i = 0; i < 4; i++) {
if (dist[1][i] == -1)continue;
ans = min(ans, dist[1][i]);
}
printf("%d", ans);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGRlcXVlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgeHkgewoJaW50IHhbMl0sIHc7Cglib29sIG9wZXJhdG9yPChjb25zdCB4eSBwKWNvbnN0IHsKCQlpZiAoeFswXSAhPSBwLnhbMF0pcmV0dXJuIHhbMF0gPCBwLnhbMF07CgkJaWYgKHhbMV0gIT0gcC54WzFdKXJldHVybiB4WzFdIDwgcC54WzFdOwoJCXJldHVybiB3IDwgcC53OwoJfQp9YVsxMjEyMTJdOwpzZXQ8eHk+U1s0XTsKaW50IE5UWzEyMTIxMl1bNF0sIGRpc3RbMTIxMjEyXVs0XTsKaW50IG1pbihpbnQgYSwgaW50IGIpIHsgaWYgKGEgPT0gLTEpcmV0dXJuIGI7IGlmIChhIDwgYilyZXR1cm4gYTsgcmV0dXJuIGI7IH0KaW50IG1haW4oKSB7CglpbnQgbiwgaSwgajsKCXNjYW5mKCIlZCIsICZuKTsKCW4gKz0gMjsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNjYW5mKCIlZCVkIiwgJmFbaV0ueFswXSwgJmFbaV0ueFsxXSk7Cglmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBmb3IgKGogPSAwOyBqIDwgNDsgaisrKU5UW2ldW2pdID0gZGlzdFtpXVtqXSA9IC0xOwoJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgZm9yIChqID0gMDsgaiA8IG47IGorKykgU1tpXS5pbnNlcnQoeyB7IGFbal0ueFtpICUgMl0sKChpIC8gMikgKiAyIC0gMSkgKiBhW2pdLnhbIShpICUgMildIH0saiB9KTsKCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKCQlzZXQ8eHk+OjppdGVyYXRvciBpdCwgbmV4dDsKCQlmb3IgKGl0ID0gU1tpXS5iZWdpbigpOzspIHsKCQkJbmV4dCA9IGl0O25leHQrKzsKCQkJaWYgKG5leHQgPT0gU1tpXS5lbmQoKSlicmVhazsKCQkJaWYgKGl0LT54WzBdID09IG5leHQtPnhbMF0pIE5UW2l0LT53XVtpXSA9IG5leHQtPnc7CgkJCWl0ID0gbmV4dDsKCQl9Cgl9CglkZXF1ZTxpbnQ+UXhbMl0sIFF5WzJdOwoJZm9yIChpID0gMDsgaSA8IDQ7IGkrKylpZihOVFswXVtpXSE9LTEpUXhbMF0ucHVzaF9iYWNrKDApLCBReVswXS5wdXNoX2JhY2soaSksZGlzdFswXVtpXT0wOwoJaW50IG5vdyA9IDA7Cgl3aGlsZSAoIVF4WzBdLmVtcHR5KCl8fCFReFsxXS5lbXB0eSgpKSB7CgkJaWYgKFF4W25vd10uZW1wdHkoKSlub3c9IW5vdzsKCQlpbnQgbm93eCA9IFF4W25vd10uZnJvbnQoKTsgUXhbbm93XS5wb3BfZnJvbnQoKTsKCQlpbnQgbm93eSA9IFF5W25vd10uZnJvbnQoKTsgUXlbbm93XS5wb3BfZnJvbnQoKTsKCQlmb3IgKGkgPSAtMTsgaSA8PSAxOyBpKyspIHsKCQkJaW50IG55ID0gKG5vd3kgKyBpICsgNCkgJSA0OwoJCQlpbnQgbnggPSBOVFtub3d4XVtub3d5XTsKCQkJaWYgKG54ID09IDEpCgkJCQlpbnQgc3AgPSAxOwoJCQlpZiAobnggPT0gLTEgfHwgZGlzdFtueF1bbnldICE9IC0xKWNvbnRpbnVlOwoJCQlReFtub3deKCEhaSldLnB1c2hfYmFjayhueCksIFF5W25vd14oISFpKV0ucHVzaF9iYWNrKG55KTsKCQkJZGlzdFtueF1bbnldID0gZGlzdFtub3d4XVtub3d5XSArICEhaTsKCQl9Cgl9CglpbnQgYW5zID0gLTE7Cglmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CgkJaWYgKGRpc3RbMV1baV0gPT0gLTEpY29udGludWU7CgkJYW5zID0gbWluKGFucywgZGlzdFsxXVtpXSk7Cgl9CglwcmludGYoIiVkIiwgYW5zKTsKCXJldHVybiAwOwp9