#include <iostream>
#include <math.h>
#include <stdio.h>
#include <map>
#include <queue>
using namespace std;
const long long x_max = 100000;
const long long y_max = 100000;
#define ll long long
int inSide (ll x, ll y)
{
if (x>=-x_max && x<=x_max && y>=-y_max && y<=y_max)
return 1;
return 0;
}
ll vertex (ll x, ll y)
{
return (2*y_max*y_max + 3*y_max - x_max + 1) + (2*y_max + 1)*y + x;
}
ll x_t, y_t;
ll n;
ll x_i, y_i;
map <ll, char> prevent;
void read ()
{
scanf ("%lld%lld", &x_t, &y_t);
scanf ("%lld", &n);
for (ll i=0; i<n; i++)
{
scanf ("%lld%lld", &x_i, &y_i);
prevent[vertex(x_i, y_i)] = 'X';
}
}
map <ll, char> check;
map <ll, ll> len;
void init ()
{
prevent.clear();
check.clear();
len.clear();
}
struct data
{
ll x, y;
data (ll x_, ll y_)
{
x = x_;
y = y_;
}
};
ll x_xq[] = {-1, -2, -2, -1, +1, +2, +2, +1};
ll y_xq[] = {-2, -1, +1, +2, +2, +1, -1, -2};
void BFS (ll x, ll y)
{
queue <data> q;
q.push(data(x, y));
check[vertex(x, y)] = 'Y';
len[vertex(x, y)] = 0;
while (!q.empty())
{
data v = q.front();
q.pop();
for (int i=0; i<8; i++)
{
ll x_p = v.x+x_xq[i];
ll y_p = v.y+y_xq[i];
if (inSide(x_p, y_p)==1 && check[vertex(x_p, y_p)]!='Y' && prevent[vertex(x_p, y_p)]!='X')
{
q.push(data(x_p, y_p));
len[vertex(x_p, y_p)] = len[vertex(v.x, v.y)]+1;
check[vertex(x_p, y_p)] = 'Y';
if (x_p == x_t && y_p == y_t) return;
}
}
}
}
int main ()
{
int t;
scanf ("%d", &t);
while (1)
{
if (t==0) break;
t--;
init();
read();
BFS(0, 0);
printf("%lld\n", len[vertex(x_t, y_t)]);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHF1ZXVlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbG9uZyBsb25nIHhfbWF4ID0gMTAwMDAwOwpjb25zdCBsb25nIGxvbmcgeV9tYXggPSAxMDAwMDA7CiNkZWZpbmUgbGwgbG9uZyBsb25nCgppbnQgaW5TaWRlIChsbCB4LCBsbCB5KQp7CglpZiAoeD49LXhfbWF4ICYmIHg8PXhfbWF4ICYmIHk+PS15X21heCAmJiB5PD15X21heCkKCQlyZXR1cm4gMTsKCXJldHVybiAwOwp9CgpsbCB2ZXJ0ZXggKGxsIHgsIGxsIHkpCnsKCXJldHVybiAoMip5X21heCp5X21heCArIDMqeV9tYXggLSB4X21heCArIDEpICsgKDIqeV9tYXggKyAxKSp5ICsgeDsKfQoKbGwgeF90LCB5X3Q7CmxsIG47CmxsIHhfaSwgeV9pOwptYXAgPGxsLCBjaGFyPiBwcmV2ZW50Owp2b2lkIHJlYWQgKCkKewoJc2NhbmYgKCIlbGxkJWxsZCIsICZ4X3QsICZ5X3QpOwoJc2NhbmYgKCIlbGxkIiwgJm4pOwoJZm9yIChsbCBpPTA7IGk8bjsgaSsrKQoJewoJCXNjYW5mICgiJWxsZCVsbGQiLCAmeF9pLCAmeV9pKTsKCQlwcmV2ZW50W3ZlcnRleCh4X2ksIHlfaSldID0gJ1gnOwoJfQp9CgptYXAgPGxsLCBjaGFyPiBjaGVjazsKbWFwIDxsbCwgbGw+IGxlbjsKdm9pZCBpbml0ICgpCnsKCXByZXZlbnQuY2xlYXIoKTsKCWNoZWNrLmNsZWFyKCk7CglsZW4uY2xlYXIoKTsKfQoKc3RydWN0IGRhdGEKewoJbGwgeCwgeTsKCWRhdGEgKGxsIHhfLCBsbCB5XykKCXsKCQl4ID0geF87CgkJeSA9IHlfOwoJfQp9OwoKbGwgeF94cVtdID0gey0xLCAtMiwgLTIsIC0xLCArMSwgKzIsICsyLCArMX07CmxsIHlfeHFbXSA9IHstMiwgLTEsICsxLCArMiwgKzIsICsxLCAtMSwgLTJ9OwoKdm9pZCBCRlMgKGxsIHgsIGxsIHkpCnsKCXF1ZXVlIDxkYXRhPiBxOwoJcS5wdXNoKGRhdGEoeCwgeSkpOwoJY2hlY2tbdmVydGV4KHgsIHkpXSA9ICdZJzsKCWxlblt2ZXJ0ZXgoeCwgeSldID0gMDsKCQoJd2hpbGUgKCFxLmVtcHR5KCkpCgl7CgkJZGF0YSB2ID0gcS5mcm9udCgpOwoJCXEucG9wKCk7CgkJZm9yIChpbnQgaT0wOyBpPDg7IGkrKykKCQl7CgkJCWxsIHhfcCA9IHYueCt4X3hxW2ldOwoJCQlsbCB5X3AgPSB2LnkreV94cVtpXTsKCQkJaWYgKGluU2lkZSh4X3AsIHlfcCk9PTEgJiYgY2hlY2tbdmVydGV4KHhfcCwgeV9wKV0hPSdZJyAmJiBwcmV2ZW50W3ZlcnRleCh4X3AsIHlfcCldIT0nWCcpCgkJCXsKCQkJCXEucHVzaChkYXRhKHhfcCwgeV9wKSk7CgkJCQlsZW5bdmVydGV4KHhfcCwgeV9wKV0gPSBsZW5bdmVydGV4KHYueCwgdi55KV0rMTsKCQkJCWNoZWNrW3ZlcnRleCh4X3AsIHlfcCldID0gJ1knOwoJCQkJaWYgKHhfcCA9PSB4X3QgJiYgeV9wID09IHlfdCkgcmV0dXJuOwoJCQl9CgkJfQoJfQp9CgppbnQgbWFpbiAoKQp7CglpbnQgdDsKCXNjYW5mICgiJWQiLCAmdCk7Cgl3aGlsZSAoMSkKCXsKCQlpZiAodD09MCkgYnJlYWs7CgkJdC0tOwoJCWluaXQoKTsKCQlyZWFkKCk7CgkJQkZTKDAsIDApOwoJCXByaW50ZigiJWxsZFxuIiwgbGVuW3ZlcnRleCh4X3QsIHlfdCldKTsKCX0KCXJldHVybiAwOwp9