int bfs()
{
while(!Q.empty()) Q.pop();
int key = hash();
vis[st[0][0]][st [0]][key] = true;
dis[st[0][0]][st [0]][key] = 0;
ddd cur,tmp;
tmp.x = st[0][0];
tmp.y = st [0];
tmp.s = key;
Q.push(tmp);
while(!Q.empty())
{
cur = Q.front();
Q.pop();
if(cur.x == edx && cur.y == edy)
{
return dis[edx][edy][cur.s];
}
for(int i=0;i<4;i++)
{
int tx = cur.x + move[i][0];
int ty = cur.y + move[i] ;
if(judge(tx , ty , cur.x , cur.y , cur.s))
{
tmp.x = tx;
tmp.y = ty;
tmp.s = hash();
if(vis[tx][ty][tmp.s] == false)
{
vis[tx][ty][tmp.s] = true;
dis[tx][ty][tmp.s] = dis[cur.x][cur.y][cur.s] + 1;
Q.push(tmp);
}
}
}
}
return -1;
}
int main()
{
while(~scanf("%d %d",&m,&n))
{
read();
printf("%d\n",bfs());
}
return 0;
}