
java
import java.util.*;
/**
* @version Ver 1.0
* @date 2025/6/18
* @description
*/
public class MatrixDiffusion {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arrs = Arrays.stream(scanner.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
int N = arrs[0];
int M = arrs[1];
int[][] matrix = new int[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if((i == arrs[2] && j == arrs[3])||(i == arrs[4] && j == arrs[5])){
matrix[i][j] = 1;
}else{
matrix[i][j] = 0;
}
}
}
solve(matrix,arrs);
}
private static void solve(int[][] matrix, int[] arrs) {
LinkedList<int[]> queue = new LinkedList<>();
int[][] directions = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
// 将起点加入队列
queue.add(new int[]{arrs[2],arrs[3]});
queue.add(new int[]{arrs[4],arrs[5]});
int times = 0;
while(!queue.isEmpty()){
// 当前queue是否发生了扩散,由于一开始有两个起始点,两个起始点都可以同时扩散,所以将这两个起始点的扩散结果合并成一个,置于外层
boolean flag = false;
int size = queue.size();
for(int j=0;j<size;j++){
int[] ints = queue.poll();
for(int i =0;i<4;i++){
int x = ints[0]+directions[i][0];
int y = ints[1]+directions[i][1];
if(x>=0 && x<arrs[0] && y>=0 && y<arrs[1] && matrix[x][y]==0){
matrix[x][y]=1;
queue.add(new int[]{x,y});
flag = true;
}
}
}
if(flag){
times++;
}
}
// for (int i = 0; i < matrix.length; i++) {
// for (int j = 0; j < matrix[0].length; j++) {
// System.out.print(matrix[i][j]+" ");
// }
// System.out.println();
// }
System.out.println(times);
}
}