1 1 1 2
5
1000000000 1 10000
19920401 1188 5566
1000000000 1 10000
1 1 10000
5 100 200
 6 15 7 15
9
6 15 15
7 14 14
6 15 15
9 14 14
7 14 16
6 15 15
6 15 15
7 14 14
8 15 15
 1 1 1000000000 2
5
1000000000 1 10000
19920401 1188 5566
1000000000 1 10000
1 1 10000
5 100 200
 89 29 88 30
16
87 31 31
14 95 95
98 88 89
96 88 88
14 97 97
13 97 98
100 88 88
88 32 32
99 88 89
90 29 29
87 31 31
15 94 96
89 29 29
88 32 32
97 89 89
88 29 30
 30 14 39 19
31
35 7 11
37 11 12
32 13 13
37 5 6
46 13 13
37 14 14
31 13 13
43 13 19
45 15 19
46 13 13
32 17 17
41 14 19
30 14 14
43 13 17
34 16 18
44 11 19
38 13 13
40 12 20
37 16 18
46 16 18
34 10 14
36 9 10
36 15 19
38 15 19
42 13 19
33 14 15
35 15 19
33 17 18
39 12 20
36 5 7
45 12 12
 9 8 7 8
9
10 6 6
10 6 6
7 7 8
9 5 6
8 9 9
9 5 5
9 8 8
8 5 6
9 10 10
 2 1 1 1
2
1 1 2
2 1 2
 13 16 20 10
18
13 16 16
20 10 10
19 10 10
12 15 15
20 10 10
18 11 11
19 10 10
19 10 10
20 10 10
19 10 10
20 10 10
20 10 10
19 10 10
18 11 11
13 16 16
12 15 15
19 10 10
19 10 10

1
 1
 -1
 1
 9
 2
 1
 -1

var l = 0;
function main() {
    var x = readline().trim().split(' ').map((x) => parseInt(x));
    var n = parseInt(readline().trim());
    var g = {};
    for (var i = 0; i < n; i++) {
        var a = readline().trim().split(' ').map((x) => parseInt(x))
        for (var j = a[1]; j <= a[2]; j++) {
            g[a[0] + '-' + j] = true;
        }
    }
    var p = [[x[0], x[1]]];
    var d = [x[2], x[3]];
    if (p[0] == d)
        return 0;
    var c = 0;
    var ans = 0;
    var nbr = [0]
    var visited = {}
    var M = 1000000000;
    var added = {};
    added[x[0] + '-' + x[1]] = true
    while (p.length > c) {
        if (compare(p[c], d)) {
            return nbr[c];
        }
        if (visited[p[c][0] + '-' + p[c][1]] != undefined) {
            continue;
        }

        if (p[c][0] >= 1 && p[c][1] >= 1 && g[(p[c][0] - 1) + '-' + (p[c][1] - 1)] && !added[(p[c][0] - 1) + '-' + (p[c][1] - 1)]) {
            p.push([p[c][0] - 1, p[c][1] - 1])
            nbr.push(nbr[c] + 1);
            added[(p[c][0] - 1) + '-' + (p[c][1] - 1)] = true;
        }
        if (p[c][0] >= 1 && p[c][1] + 1 <= M && g[(p[c][0] - 1) + '-' + (p[c][1] + 1)] && !added[(p[c][0] - 1) + '-' + (p[c][1] + 1)]) {
            p.push([p[c][0] - 1, p[c][1] + 1])
            nbr.push(nbr[c] + 1);
            added[(p[c][0] - 1) + '-' + (p[c][1] + 1)] = true;
        }
        if (p[c][0] >= 1 && g[(p[c][0] - 1) + '-' + (p[c][1])] && !added[(p[c][0] - 1) + '-' + (p[c][1])]) {
            p.push([p[c][0] - 1, p[c][1]])
            nbr.push(nbr[c] + 1);
            added[(p[c][0] - 1) + '-' + (p[c][1])] = true;
        }
        if (p[c][0] + 1 <= M && g[(p[c][0] + 1) + '-' + (p[c][1])] && !added[(p[c][0] + 1) + '-' + (p[c][1])]) {
            p.push([p[c][0] + 1, p[c][1]])
            nbr.push(nbr[c] + 1);
            added[(p[c][0] + 1) + '-' + (p[c][1])] = true;
        }
        if (p[c][0] + 1 <= M && p[c][1] + 1 <= M && g[(p[c][0] + 1) + '-' + (p[c][1] + 1)] && !added[(p[c][0] + 1) + '-' + (p[c][1] + 1)]) {
            p.push([p[c][0] + 1, p[c][1] + 1])
            nbr.push(nbr[c] + 1);
            added[(p[c][0] + 1) + '-' + (p[c][1] + 1)] = true;
        }
        if (p[c][0] >= 1 && p[c][1] + 1 <= M && g[(p[c][0] - 1) + '-' + (p[c][1] + 1)] && !added[(p[c][0] - 1) + '-' + (p[c][1] + 1)]) {
            p.push([p[c][0] - 1, p[c][1] + 1])
            nbr.push(nbr[c] + 1);
            added[(p[c][0] - 1) + '-' + (p[c][1] + 1)] = true;
        }
        if (p[c][1] - 1 >= 0 && g[(p[c][0]) + '-' + (p[c][1] - 1)] && !added[(p[c][0]) + '-' + (p[c][1] - 1)]) {
            p.push([p[c][0], p[c][1] - 1])
            nbr.push(nbr[c] + 1);
            added[(p[c][0]) + '-' + (p[c][1] - 1)] = true;
        }
        if (p[c][1] + 1 <= M && g[(p[c][0]) + '-' + (p[c][1] + 1)] && !added[(p[c][0]) + '-' + (p[c][1] + 1)]) {
            p.push([p[c][0], p[c][1] + 1])
            nbr.push(nbr[c] + 1);
            added[(p[c][0]) + '-' + (p[c][1] + 1)] = true;
        }
        visited[p[c][0] + '-' + p[c][1]] = true;
        c++;
    }

    return -1;
}

print(main())


function compare(a,b){
    return a[0]==b[0] && a[1]==b[1]
}