using System; class Program { static void Main() { var s = Console.ReadLine().Split(); long x1 = long.Parse(s[0]); long y1 = long.Parse(s[1]); long x2 = long.Parse(s[2]); long y2 = long.Parse(s[3]); long dx = Math.Abs(x1 - x2); long dy = Math.Abs(y1 - y2); if (dx == 0 && dy == 0) { Console.WriteLine(0); return; } // 1手で行ける if (dx == 0 || dy == 0) // 飛車 { Console.WriteLine(1); return; } if (dx + dy <= 2) // マンハッタン距離2以内 { Console.WriteLine(1); return; } // 2手で行ける条件 // 小移動 → 飛車 // つまり (x1+a == x2) または (y1+b == y2) となる a,b で |a|+|b|<=2 が存在するか // ⇔ |x1 - x2| <= 2 または |y1 - y2| <= 2 if (dx <= 2 || dy <= 2) { Console.WriteLine(2); return; } // 小移動2回 → マンハッタン距離4以内 if (dx + dy <= 4) { Console.WriteLine(2); return; } // 飛車 → 小移動 // 1手目で x = x2 の任意の高さに行けるので、そこで小移動で y2 に近づく: // 必要距離 = |y1 - y2| <= 2 if (Math.Abs(y1 - y2) <= 2) { Console.WriteLine(2); return; } // y = y2 に飛んでから小移動: if (Math.Abs(x1 - x2) <= 2) { Console.WriteLine(2); return; } // どれにも当てはまらないなら最大3手 Console.WriteLine(3); } }