#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
using namespace std;
int n,m,flag=0,a,b;
int dis[4][2]= {1,0,0,1,-1,0,0,-1};
int vis[1005][1005];
int w[1005][1005];
struct man
{
int x,y,step;
};
queue<man>q;
void bfs(man s)
{
q.push(s);
vis[s.x][s.y]=1;
while(!q.empty())
{
man t=q.front();
q.pop();
//printf("%d %d %d\n",t.x,t.y,t.step);system("pause");
if(t.x==a&&t.y==b){printf("%d\n",t.step);flag=1;return;}
for(int i=0;i<4;i++)
{
int xx=t.x+dis[i][0];int yy=t.y+dis[i][1];//
//printf("%d %d\n",xx,yy);
if(xx>=0&&xx<=1000&&yy>=0&&yy<=1000&&w[xx][yy]!=1&&vis[xx][yy]==0)
{
man k;k.x=xx;k.y=yy;k.step=t.step+1;q.push(k);vis[xx][yy]=1;
}
}
}
}
int main()
{
int g,h;
memset(vis,0,sizeof(vis));
memset(w,0,sizeof(w));
scanf("%d%d%d",&a,&b,&n);man s;
a+=500;b+=500;
for(int i=0;i<n;i++){scanf("%d%d",&g,&h);w[g+500][h+500]=1;}
s.x=500;s.y=500;s.step=0;
bfs(s);
//if(flag==0)printf("-1\n");
return 0;
}