import java.io.*;
import java.util.*;
public class Main {
static int[][] dir = {
{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}
};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int n = 0; n < N; n++){
int l = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int eX = Integer.parseInt(st.nextToken());
int eY = Integer.parseInt(st.nextToken());
if(r == eX && c == eY){
System.out.println(0);
continue;
}
System.out.println(bfs(l,r,c,eX,eY));
}
}
static int bfs(int l, int r, int c, int eX, int eY){
boolean[][] visited = new boolean[l][l];
Queue<int[]> q = new ArrayDeque<>();
q.add(new int[] {r,c, 0});
visited[r][c] = true;
while(!q.isEmpty()){
int[] a = q.poll();
int x = a[0]; int y = a[1]; int cnt = a[2];
for(int d = 0; d < 8; d++){
int nr = x + dir[d][0];
int nc = y + dir[d][1];
if(nr >= 0 && nc >= 0 && nr < l && nc < l
&&!visited[nr][nc]){
if(nr == eX && nc == eY) return cnt+1;
visited[nr][nc] = true;
q.offer(new int[] {nr,nc,cnt+1});
}
}
}
return -1;
}
}
DFS & BFS는 어느 상황에 사용하는게 적합할까?
최소 최단 키워드가 존재한다면 사용