#include<bits/stdc++.h>
using namespace std;
int fx[12][2] = {{1,2},{2,1},{-1,2},{2,-1},{1,-2},{-2,1},{-1,-2},{-2,-1}, {2,2},{2,-2},{-2,2},{-2,-2}};
struct node{
int x,y,step;
};
queue<node> q;
void bfs(int x,int y){
int vis[50][50];
q.push(node{x,y,0});
vis[x][y] = 1;
if(x==1&&y==1){
cout << 0 << endl;
return ;
}
while(!q.empty()){
node fnt = q.front();
q.pop();
if(fnt.x == 1 && fnt.y == 1){
cout << fnt.step << endl;
return ;
}
for(int i = 0;i < 12;i++){
int nx = fnt.x + fx[i][0];
int ny = fnt.y + fx[i][1];
if(nx>=1&&nx<=30&&ny>=1&&ny<=30&&vis[nx][ny]==0){
vis[nx][ny] = 1;
q.push(node{nx,ny,fnt.step+1});
}
}
}
}
int main(){
int x1,y1,x2,y2;
cin >> x1 >> y1 >> x2 >> y2;
bfs(x1,y1);bfs(x2,y2);
return 0;
}