#include <iostream>
#include <utility>
#include <queue>
#include <cstring>
//参考《挑战》中的宽搜
using namespace std;
int dx[8]={1,2,2,1,-1,-2,-2,-1};
int dy[8]={-2,-1,1,2,2,1,-1,-2};
int main()
{
int N;
cin>>N;
int jg[N];
for(int i=0;i<N;i++)
{
int NUM;
cin>>NUM;
int a[NUM][NUM];
memset(a,0,sizeof(a));
int sx,sy;
int ex,ey;
cin>>sx>>sy;
cin>>ex>>ey;
queue<pair<int,int> > que;
que.push(pair<int,int>(sx,sy));
a[sx][sy]=1;
jg[i]=0;
while(que.size())
{
pair<int,int> t=que.front();
que.pop();
if((t.first==ex)&&(t.second==ey))
{
jg[i]=a[t.first][t.second];
break;
}
for(int i=0;i<8;i++)
{
int nx=t.first+dx[i];
int ny=t.second+dy[i];
if((nx>=0)&&(nx<NUM)&&(ny>=0)&&(ny<NUM)&&(a[nx][ny]==0))
{
que.push(pair<int,int>(nx,ny));
a[nx][ny]=a[t.first][t.second]+1;
}
}
}
}
for(int i=0;i<N;i++)
{
cout<<jg[i]-1<<endl;
}
return 0;
}
l*l的国际象棋棋盘,给出马的起始坐标和终止坐标,求从起始到终止最少多少步。