#include<bits/stdc++.h>
using namespace std;
struct xy{
int x;
int y;
};
queue<xy> q1,q2;
int x_1,y_1,x_2,y_2;
int a1[300][300]={};
int a2[300][300]={};
bool v1[300][300]={};
bool v2[300][300]={};
int dx[12]={-2,-1,1,2,2,2,2,1,-1,-2,2,-2};
int dy[12]={2,2,2,2,1,-1,-2,-2,-2,-2,1,-1};
void bfs1(int x,int y){
bool flg=0;
v1[x][y]=1;
q1.push({x,y});
while(q1.size()!=0){
xy first=q1.front();
q1.pop();
for(int i=0;i<12;i++){
int xto=first.x+dx[i];
int yto=first.y+dy[i];
if(!v1[xto][yto] && xto>=1 && xto<=500 && yto>=1 && yto<=500) q1.push({xto,yto}),v1[xto][yto]=1,a1[xto][yto]=a1[x][y]+1;
if(xto==1 && yto==1){
cout<<a1[xto][yto]<<endl;
flg=1;
break;
}
}if(flg) break;
}
}
void bfs2(int x,int y){
bool flg=0;
q2.push({x,y});
v2[x][y]=1;
while(q2.size()!=0){
xy first=q2.front();
q2.pop();
for(int i=0;i<12;i++){
int xto=first.x+dx[i];
int yto=first.y+dy[i];
if(!a2[xto][yto] && xto>=1 && xto<=500 && yto>=1 && yto<=500) q2.push({xto,yto}),a2[xto][yto]=1,a2[xto][yto]=a2[x][y]+1;
if(xto==1 && yto==1){
cout<<a2[xto][yto]<<endl;
flg=1;
break;
}
}if(flg) break;
}
}
int main(){
cin>>x_1>>y_1>>x_2>>y_2;
bfs1(x_1,y_1);
bfs2(x_2,y_2);
return 0;
}
菜QwQ