#include<bits/stdc++.h>
using namespace std;
int dx[30]={0,-2,-2,-1,1,2,2,2,2,1,-1,-2,-2};
int dy[30]={0,1,2,2,2,2,1,-1,-2,-2,-2,-2,-1};//12
int x1,y1,x2,y2;
int vis1[30][30],vis2[30][30];
struct node{
int x,y,step;
};
int main(){
cin>>x1>>y1>>x2>>y2;
queue<node>q1;
q1.push((node){x1,y1,0});
vis1[x1][y1]=1;
while(!q1.empty()){
node p=q1.front();
q1.pop();
if(p.x==1&&p.y==1){
cout<<p.step<<endl;
break;
}
for(int i=1;i<=12;i++){
int xx=dx[i]+p.x,yy=dy[i]+p.y;
if(xx>=1&&yy>=1&&!vis1[xx][yy]){
vis1[xx][yy]=1;
q1.push((node){xx,yy,p.step+1});
}
}
}
queue<node>q2;
q2.push((node){x2,y2,0});
vis2[x2][y2]=1;
while(!q2.empty()){
node p=q2.front();
q2.pop();
if(p.x==1&&p.y==1){
cout<<p.step<<endl;
break;
}
for(int i=1;i<=12;i++){
int xx=dx[i]+p.x,yy=dy[i]+p.y;
if(xx>=1&&yy>=1&&!vis2[xx][yy]){
vis2[xx][yy]=1;
q2.push((node){xx,yy,p.step+1});
}
}
}
return 0;
}