#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ld> vld;
typedef vector<ll> vll;
typedef vector<pair<ll, ll>> vp;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define fr first
#define sc second
#define all(a) a.begin(),a.end()
void Hendi() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
freopen("error.txt", "w", stderr);
#endif
}
const ll INF = 1e18;
const ll MOD = 1e9 + 7;
const double EPS = 1e-7;
const int N = 1e6 + 5;
const int N1 = 1e5 + 5;
int dx[] = {0, 0, 1, -1, -1, -1, 1, 1};
int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
char di[] = {'R', 'L', 'D', 'U'};
ll mul(ll a, ll b) {
return ((a % MOD) * (b % MOD)) % MOD;
}
ll sub(ll a, ll b) {
return ((a % MOD) - (b % MOD) + MOD) % MOD;
}
ll add(ll a, ll b) {
return ((a % MOD) + (b % MOD)) % MOD;
}
int n, m, O, st_row, st_col, end_row, end_col;
vector<pii> obs_r, obs_c;
map<pii, ll> dist;
ll ans;
void bfs() {
queue<pii> q;
q.push({st_row, st_col});
dist[{st_row, st_col}] = 0;
while (!q.empty()) {
int x = q.front().fr, y = q.front().sc;
q.pop();
auto row = lower_bound(all(obs_r), make_pair(x, y));
auto col = lower_bound(all(obs_c), make_pair(y, x));
// Row
int R = row->fr, C = row->sc;
// right
if (end_row == x && end_col > y && end_col < C)ans = min(ans, dist[{x, y}] + 1);
if (dist[{x, y}] + 1 < dist[{R, C - 1}]) {
dist[{R, C - 1}] = dist[{x, y}] + 1;
q.push({R, C - 1});
}
row--;
R = row->fr, C = row->sc;
// left
if (end_row == x && end_col < y && end_col > C) ans = min(ans, dist[{x, y}] + 1);
if (dist[{x, y}] + 1 < dist[{R, C + 1}]) {
dist[{R, C + 1}] = dist[{x, y}] + 1;
q.push({R, C + 1});
}
// Col
R = col->sc, C = col->fr;
// down
if (end_col == y && end_row > x && end_row < R)ans = min(ans, dist[{x, y}] + 1);
if (dist[{x, y}] + 1 < dist[{R - 1, C}]) {
dist[{R - 1, C}] = dist[{x, y}] + 1;
q.push({R - 1, C});
}
col--;
R = col->sc, C = col->fr;
// up
if (end_col == y && end_row < x && end_row > R) ans = min(ans, dist[{x, y}] + 1);
if (dist[{x, y}] + 1 < dist[{R + 1, C}]) {
dist[{R + 1, C}] = dist[{x, y}] + 1;
q.push({R + 1, C});
}
}
}
void solve() {
cin >> n >> m >> O;
cin >> st_row >> st_col >> end_row >> end_col;
int x, y;
for (int i = 0; i < O; ++i) {
cin >> x >> y;
obs_r.push_back({x, y});
obs_c.push_back({y, x});
dist[{x - 1, y}] = INF;
dist[{x + 1, y}] = INF;
dist[{x, y - 1}] = INF;
dist[{x, y + 1}] = INF;
}
if (st_row == end_row && st_col == end_col) return void(cout << "0\n");
for (int i = 0; i < n; ++i) {
dist[{i, m - 1}] = INF;
dist[{i, 0}] = INF;
obs_r.push_back({i, m});
obs_r.push_back({i, -1});
}
for (int i = 0; i < m; ++i) {
dist[{0, i}] = INF;
dist[{n - 1, i}] = INF;
obs_c.push_back({i, n});
obs_c.push_back({i, -1});
}
sort(all(obs_r));
sort(all(obs_c));
ans = INF;
bfs();
cout << (ans == INF ? -1 : ans) << '\n';
dist.clear();
obs_r.clear();
obs_c.clear();
}
int main() {
freopen("maze.in", "r", stdin);
Hendi();
int T = 1;
cin >> T;
while (T--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGQ+IHZsZDsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8cGFpcjxsbCwgbGw+PiB2cDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKI2RlZmluZSBmciBmaXJzdAojZGVmaW5lIHNjIHNlY29uZAojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksYS5lbmQoKQoKCnZvaWQgSGVuZGkoKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgZnJlb3BlbigiZXJyb3IudHh0IiwgInciLCBzdGRlcnIpOwojZW5kaWYKfQoKY29uc3QgbGwgSU5GID0gMWUxODsKY29uc3QgbGwgTU9EID0gMWU5ICsgNzsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTc7CmNvbnN0IGludCBOID0gMWU2ICsgNTsKY29uc3QgaW50IE4xID0gMWU1ICsgNTsKaW50IGR4W10gPSB7MCwgMCwgMSwgLTEsIC0xLCAtMSwgMSwgMX07CmludCBkeVtdID0gezEsIC0xLCAwLCAwLCAxLCAtMSwgMSwgLTF9OwpjaGFyIGRpW10gPSB7J1InLCAnTCcsICdEJywgJ1UnfTsKCmxsIG11bChsbCBhLCBsbCBiKSB7CiAgICByZXR1cm4gKChhICUgTU9EKSAqIChiICUgTU9EKSkgJSBNT0Q7Cn0KCmxsIHN1YihsbCBhLCBsbCBiKSB7CiAgICByZXR1cm4gKChhICUgTU9EKSAtIChiICUgTU9EKSArIE1PRCkgJSBNT0Q7Cn0KCmxsIGFkZChsbCBhLCBsbCBiKSB7CiAgICByZXR1cm4gKChhICUgTU9EKSArIChiICUgTU9EKSkgJSBNT0Q7Cn0KCmludCBuLCBtLCBPLCBzdF9yb3csIHN0X2NvbCwgZW5kX3JvdywgZW5kX2NvbDsKdmVjdG9yPHBpaT4gb2JzX3IsIG9ic19jOwptYXA8cGlpLCBsbD4gZGlzdDsKbGwgYW5zOwoKdm9pZCBiZnMoKSB7CiAgICBxdWV1ZTxwaWk+IHE7CiAgICBxLnB1c2goe3N0X3Jvdywgc3RfY29sfSk7CiAgICBkaXN0W3tzdF9yb3csIHN0X2NvbH1dID0gMDsKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHggPSBxLmZyb250KCkuZnIsIHkgPSBxLmZyb250KCkuc2M7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBhdXRvIHJvdyA9IGxvd2VyX2JvdW5kKGFsbChvYnNfciksIG1ha2VfcGFpcih4LCB5KSk7CiAgICAgICAgYXV0byBjb2wgPSBsb3dlcl9ib3VuZChhbGwob2JzX2MpLCBtYWtlX3BhaXIoeSwgeCkpOwogICAgICAgIC8vIFJvdwogICAgICAgIGludCBSID0gcm93LT5mciwgQyA9IHJvdy0+c2M7CiAgICAgICAgLy8gcmlnaHQKICAgICAgICBpZiAoZW5kX3JvdyA9PSB4ICYmIGVuZF9jb2wgPiB5ICYmIGVuZF9jb2wgPCBDKWFucyA9IG1pbihhbnMsIGRpc3Rbe3gsIHl9XSArIDEpOwogICAgICAgIGlmIChkaXN0W3t4LCB5fV0gKyAxIDwgZGlzdFt7UiwgQyAtIDF9XSkgewogICAgICAgICAgICBkaXN0W3tSLCBDIC0gMX1dID0gZGlzdFt7eCwgeX1dICsgMTsKICAgICAgICAgICAgcS5wdXNoKHtSLCBDIC0gMX0pOwogICAgICAgIH0KICAgICAgICByb3ctLTsKICAgICAgICBSID0gcm93LT5mciwgQyA9IHJvdy0+c2M7CiAgICAgICAgLy8gbGVmdAogICAgICAgIGlmIChlbmRfcm93ID09IHggJiYgZW5kX2NvbCA8IHkgJiYgZW5kX2NvbCA+IEMpIGFucyA9IG1pbihhbnMsIGRpc3Rbe3gsIHl9XSArIDEpOwogICAgICAgIGlmIChkaXN0W3t4LCB5fV0gKyAxIDwgZGlzdFt7UiwgQyArIDF9XSkgewogICAgICAgICAgICBkaXN0W3tSLCBDICsgMX1dID0gZGlzdFt7eCwgeX1dICsgMTsKICAgICAgICAgICAgcS5wdXNoKHtSLCBDICsgMX0pOwogICAgICAgIH0KICAgICAgICAvLyBDb2wKICAgICAgICBSID0gY29sLT5zYywgQyA9IGNvbC0+ZnI7CiAgICAgICAgLy8gZG93bgogICAgICAgIGlmIChlbmRfY29sID09IHkgJiYgZW5kX3JvdyA+IHggJiYgZW5kX3JvdyA8IFIpYW5zID0gbWluKGFucywgZGlzdFt7eCwgeX1dICsgMSk7CiAgICAgICAgaWYgKGRpc3Rbe3gsIHl9XSArIDEgPCBkaXN0W3tSIC0gMSwgQ31dKSB7CiAgICAgICAgICAgIGRpc3Rbe1IgLSAxLCBDfV0gPSBkaXN0W3t4LCB5fV0gKyAxOwogICAgICAgICAgICBxLnB1c2goe1IgLSAxLCBDfSk7CiAgICAgICAgfQogICAgICAgIGNvbC0tOwogICAgICAgIFIgPSBjb2wtPnNjLCBDID0gY29sLT5mcjsKICAgICAgICAvLyB1cAogICAgICAgIGlmIChlbmRfY29sID09IHkgJiYgZW5kX3JvdyA8IHggJiYgZW5kX3JvdyA+IFIpIGFucyA9IG1pbihhbnMsIGRpc3Rbe3gsIHl9XSArIDEpOwogICAgICAgIGlmIChkaXN0W3t4LCB5fV0gKyAxIDwgZGlzdFt7UiArIDEsIEN9XSkgewogICAgICAgICAgICBkaXN0W3tSICsgMSwgQ31dID0gZGlzdFt7eCwgeX1dICsgMTsKICAgICAgICAgICAgcS5wdXNoKHtSICsgMSwgQ30pOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IG0gPj4gTzsKICAgIGNpbiA+PiBzdF9yb3cgPj4gc3RfY29sID4+IGVuZF9yb3cgPj4gZW5kX2NvbDsKICAgIGludCB4LCB5OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBPOyArK2kpIHsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIG9ic19yLnB1c2hfYmFjayh7eCwgeX0pOwogICAgICAgIG9ic19jLnB1c2hfYmFjayh7eSwgeH0pOwogICAgICAgIGRpc3Rbe3ggLSAxLCB5fV0gPSBJTkY7CiAgICAgICAgZGlzdFt7eCArIDEsIHl9XSA9IElORjsKICAgICAgICBkaXN0W3t4LCB5IC0gMX1dID0gSU5GOwogICAgICAgIGRpc3Rbe3gsIHkgKyAxfV0gPSBJTkY7CiAgICB9CiAgICBpZiAoc3Rfcm93ID09IGVuZF9yb3cgJiYgc3RfY29sID09IGVuZF9jb2wpIHJldHVybiB2b2lkKGNvdXQgPDwgIjBcbiIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBkaXN0W3tpLCBtIC0gMX1dID0gSU5GOwogICAgICAgIGRpc3Rbe2ksIDB9XSA9IElORjsKICAgICAgICBvYnNfci5wdXNoX2JhY2soe2ksIG19KTsKICAgICAgICBvYnNfci5wdXNoX2JhY2soe2ksIC0xfSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07ICsraSkgewogICAgICAgIGRpc3RbezAsIGl9XSA9IElORjsKICAgICAgICBkaXN0W3tuIC0gMSwgaX1dID0gSU5GOwogICAgICAgIG9ic19jLnB1c2hfYmFjayh7aSwgbn0pOwogICAgICAgIG9ic19jLnB1c2hfYmFjayh7aSwgLTF9KTsKICAgIH0KICAgIHNvcnQoYWxsKG9ic19yKSk7CiAgICBzb3J0KGFsbChvYnNfYykpOwogICAgYW5zID0gSU5GOwogICAgYmZzKCk7CiAgICBjb3V0IDw8IChhbnMgPT0gSU5GID8gLTEgOiBhbnMpIDw8ICdcbic7CiAgICBkaXN0LmNsZWFyKCk7CiAgICBvYnNfci5jbGVhcigpOwogICAgb2JzX2MuY2xlYXIoKTsKfQoKaW50IG1haW4oKSB7CiAgICBmcmVvcGVuKCJtYXplLmluIiwgInIiLCBzdGRpbik7CiAgICBIZW5kaSgpOwogICAgaW50IFQgPSAxOwogICAgY2luID4+IFQ7CiAgICB3aGlsZSAoVC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==