#include <bits/stdc++.h>
using namespace std;
int vis[1000][1000];
struct node{
int x,y;
int step;
}q[90000];
void bfs(int x,int y)
{
memset(vis,0,sizeof(vis));
int t,h;
t=h=1;
q[h].x=x;
q[h].y=y;
q[h].step=0;
vis[q[h].x][q[h].y]=1;
while(h<=t)
{
int nx1=q[h].x+2,ny1=q[h].y+1;
int nx2=q[h].x+2,ny2=q[h].y-1;
int nx3=q[h].x-2,ny3=q[h].y+1;
int nx4=q[h].x-2,ny4=q[h].y-1;
int nx5=q[h].x+1,ny5=q[h].y+2;
int nx6=q[h].x+1,ny6=q[h].y-2;
int nx7=q[h].x-1,ny7=q[h].y+2;
int nx8=q[h].x-1,ny8=q[h].y-2;
int nx9=q[h].x+2,ny9=q[h].y+2;
int nx10=q[h].x+2,ny10=q[h].y-2;
int nx11=q[h].x-2,ny11=q[h].y+2;
int nx12=q[h].x-2,ny12=q[h].y-2;
if(nx1==1&&ny1==1||nx2==1&&ny2==1||nx3==1&&ny3==1||nx4==1&&ny4==1||nx5==1&&ny5==1||nx6==1&&ny6==1||nx7==1&&ny7==1||nx8==1&&ny8==1||nx9==1&&ny9==1||nx10==1&&ny10==1||nx11==1&&ny11==1||nx12==1&&ny12==1)
{
cout<<q[h].step+1<<endl;
return;
}
if(nx1>=0&&ny1>=0&&vis[nx1][ny1]==0)
{
t++;
q[t].x=nx1;
q[t].y=ny1;
q[t].step=q[h].step+1;
vis[nx1][ny1]=1;
}
if(nx2>=0&&ny2>=0&&vis[nx2][ny2]==0)
{
t++;
q[t].x=nx2;
q[t].y=ny2;
q[t].step=q[h].step+1;
vis[nx2][ny2]=1;
}
if(nx3>=0&&ny3>=0&&vis[nx3][ny3]==0)
{
t++;
q[t].x=nx3;
q[t].y=ny3;
q[t].step=q[h].step+1;
vis[nx3][ny3]=1;
}
if(nx4>=0&&ny4>=0&&vis[nx4][ny4]==0)
{
t++;
q[t].x=nx4;
q[t].y=ny4;
q[t].step=q[h].step+1;
vis[nx4][ny4]=1;
}
if(nx5>=0&&ny5>=0&&vis[nx5][ny5]==0)
{
t++;
q[t].x=nx5;
q[t].y=ny5;
q[t].step=q[h].step+1;
vis[nx5][ny5]=1;
}
if(nx6>=0&&ny6>=0&&vis[nx6][ny6]==0)
{
t++;
q[t].x=nx6;
q[t].y=ny6;
q[t].step=q[h].step+1;
vis[nx6][ny6]=1;
}
if(nx7>=0&&ny7>=0&&vis[nx7][ny7]==0)
{
t++;
q[t].x=nx7;
q[t].y=ny7;
q[t].step=q[h].step+1;
vis[nx7][ny7]=1;
}
if(nx8>=0&&ny8>=0&&vis[nx8][ny8]==0)
{
t++;
q[t].x=nx8;
q[t].y=ny8;
q[t].step=q[h].step+1;
vis[nx8][ny8]=1;
}
if(nx9>=0&&ny9>=0&&vis[nx9][ny9]==0)
{
t++;
q[t].x=nx9;
q[t].y=ny9;
q[t].step=q[h].step+1;
vis[nx9][ny9]=1;
}
if(nx10>=0&&ny10>=0&&vis[nx10][ny10]==0)
{
t++;
q[t].x=nx10;
q[t].y=ny10;
q[t].step=q[h].step+1;
vis[nx10][ny10]=1;
}
if(nx11>=0&&ny11>=0&&vis[nx11][ny11]==0)
{
t++;
q[t].x=nx11;
q[t].y=ny11;
q[t].step=q[h].step+1;
vis[nx11][ny11]=1;
}
if(nx12>=0&&ny12>=0&&vis[nx12][ny12]==0)
{
t++;
q[t].x=nx12;
q[t].y=ny12;
q[t].step=q[h].step+1;
vis[nx12][ny12]=1;
}
h++;
}
}
int main()
{
int A1,A2,B1,B2;
cin>>A1>>B1;
cin>>A2>>B2;
if(A1==1&&B1==1)
cout<<0<<endl;
else bfs(A1,B1);
if(A2==1&&B2==1)
cout<<0<<endl;
else bfs(A2,B2);
return 0;
}