#include<bits/stdc++.h>
using namespace std;
int dx[15]={-2,-1,1,2,2,2,2,1,-1,-2,2,-2};
int dy[15]={2,2,2,2,1,-1,-2,-2,-2,-2,1,-1};
int x1,y1,x2,y2,a[305][305],vis[305][305];
queue<int> q,p;
void bfs1(){
a[1][1]=0;
vis[1][1]=1;
while (!q.empty()){
int xx=q.front(),yy=p.front();
q.pop(),p.pop();
for (int i=0;i<8;i++){
int u=xx+dx[i],v=yy+dy[i];
if (u>=1&&u<=x1&&v>=1&&v<=y1&&vis[u][v]==0){
a[u][v]=a[xx][yy]+1;
vis[u][v]=1;
q.push(u);
p.push(v);
}
if (u==x1&&v==y1){
cout<<a[u][v]<<"\n";
return ;
}
}
}
}
void bfs2(){
a[1][1]=0;
vis[1][1]=1;
while (!q.empty()){
int xx=q.front(),yy=p.front();
q.pop(),p.pop();
for (int i=0;i<8;i++){
int u=xx+dx[i],v=yy+dy[i];
if (u>=1&&u<=x2&&v>=1&&v<=y2&&vis[u][v]==0){
a[u][v]=a[xx][yy]+1;
vis[u][v]=1;
q.push(u);
p.push(v);
}
if (u==x2&&v==y2){
cout<<a[u][v]<<"\n";
return ;
}
}
}
}
int main(){
cin>>x1>>y1>>x2>>y2;
bfs1();
memset(a,-1,sizeof(a));
memset(vis,0,sizeof(vis));
bfs2();
return 0;
}