// BFS
#include <stdio.h>
#include <string.h>
int visited[301][301]; // visited 已经访问过了
int dic[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
int head,end,n,ex,ey,sx,sy;
struct quene
{
int x,y,pre; // pre 前一个结点
}q[100000];
void bfs()
{
int xx,yy;
head=0; //队头 下标为0的元素 第一个 head
end=1; // 下一次要放的元素
q[end].pre=0; //要放的元素 de 前一个结点 即、
q[end].x=sx;
q[end].y=sy;
visited[sx][sy]=1;
while (head<end)
{
head++; // 开始往下边走 head++
for (int i=0;i<8;i++)
{
xx=q[head].x+dic[i][0];
yy=q[head].y+dic[i][1];
if (xx>=0&&xx<n&&yy>=0&&yy<n&&visited[xx][yy]==0)
{
end++;
q[end].x=xx;
q[end].y=yy;
q[end].pre=head;
visited[xx][yy]=1;
if (xx==ex&&yy==ey) return;
}
}
}
}
void getflo()
{
int floor=0;
while (q[end].pre!=0) // 倒回去 因为 保留了路径
{
floor++;
end=q[end].pre;
}
printf("%d\n",floor);
}
int main()
{
int ncase;
scanf("%d",&ncase);
while (ncase--)
{
memset(visited,0,sizeof(visited));
//memset(q,0,sizeof(q));
scanf("%d",&n);
scanf("%d %d",&sx,&sy);
scanf("%d %d",&ex,&ey);
if (sx==ex&&sy==ey)
{
printf("0\n");
continue;
}
else
{
bfs();
getflo();
}
}
return 0;
}