-157778763 218978790 976692563 591093088
 -1 -4 1 4
 -999999999 -1000000000 -1 0
 1000000000 1000000000 1000000000 1000000000
 -2 -3 -2 1
 -1000000000 -999999999 1000000000 999999999
 0 -1 0 1
 -999999999 -999999999 999999999 999999999
 -946749893 -687257665 -539044455 -443568671
 -26644507 -867720841 975594569 264730225
 309857887 -687373066 663986893 403321752
 -2 -2 -2 0
 0 -2 0 2
 0 -1 2 1
 -2 -2 2 2
 -999999999 -1000000000 999999999 1000000000
 -330513944 -970064382 500608496 369852884
 0 -3 0 3
 0 0 2 2
 -946749893 -687257666 -539044455 -443568670
 -330513944 -970064383 500608496 369852885
 -1000000000 -1000000000 1000000000 1000000000
 0 -1 2 3
 -999999999 -999999999 -1 -1
 309857887 -687373065 663986893 403321751
 -482406510 -512306895 412844236 -168036049
 0 0 2 0
 0 0 0 0
 -471257905 -685885154 782342299 909511044
 -482406510 -512306894 412844236 -168036050
 -157778763 218978791 976692563 591093087
 -411495869 33834653 -234317741 925065545
 -2 -3 2 3
 -411495869 33834652 -234317741 925065546
 -26644507 -867720842 975594569 264730226
 -537640548 -254017710 62355638 588691834
 -471257905 -685885153 782342299 909511043
 -1 -3 1 3
 1000000000 999999999 1000000000 999999999
 1 0 5 6
 -537640548 -254017711 62355638 588691835

211076501291102387 14 500000000000000000 1 3 2000000000000000000 2 1999999998000000001 49676664342971903 567493356068872580 193123336596257367 2 3 5 13 2000000000000000000 556817654843544374 4 5 49676664750677342 556817655674666815 2000000002000000001 8 499999999000000001 193123336242128360 154104366473536355 2 1 999994501061310398 154104365578285608 211076500156631060 78953311064369599 18 78953311241547728 567493357071111657 252811256874252458 999994499807710193 11 1 18 252811257474248645
#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<stdlib.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>

using namespace std;

FILE *stream;

struct coord
{
	int x, y;
};

struct robot
{
	int f, s, l;
};

typedef unsigned long long ull;
typedef short int int16;
typedef long double ld;
typedef long long ll;

typedef set<int> setint;

//typedef queue <coord> quec;

typedef stack<long long> staint;

typedef pair<int, int> pint;

typedef int tlong[10000];

typedef map<int, pint> mapa;

typedef pair<int, pair<int, int> > mpair;

const long long INFL = ll(1e18);
const int INF = int(1e9 + 1);
const int SIZE = int(3e3 + 2);
const long double eps = 0.00001;
const double pi = 3.141592653;

void include_files();
void solution();
ll nsd(ll a, ll b);
ll POW(ll z, int step)
{
	if (step < 1)
		return 1;
	if (step == 1)
		return z;
	ld cur = POW(z, step / 2);
	cur *= cur;
	if (step % 2)
		cur *= z;
	return cur;
}

//scanf("%d", &a);
struct rob
{
	int s, len;
};

void solution()
{
	ll x3, y3, x4, y4, h1 = 0, h2 = 0;
	cin >> x3 >> y3 >> x4 >> y4;
	if ((x3 + y3) % 2 == 0)
		h1 = 1;
	if ((x4 + y4) % 2 == 0)
		h2 = 1;
	if (x3 % 2 == 1 && y3 % 2 == 1)
		cout << ((y4 - y3) / 2 + 1) * ((x4 - x3) / 2 + 1) + ((y4 - y3) / 2) * ((x4 - x3) / 2);
	else if (x3 % 2 == 0 && y3 % 2 == 1)
		cout << ((y4 - y3) / 2 + 1) * ((x4 - x3) / 2) + ((y4 - y3) / 2) * ((x4 - x3) / 2 + 1);
	else if (x3 % 2 == 1 && y3 % 2 == 0)
		cout << ((y4 - y3) / 2 + 1) * ((x4 - x3) / 2) + ((y4 - y3) / 2 + 1) * ((x4 - x3) / 2 + 1);
	else  if (x3 % 2 == 0 && y3 % 2 == 0)
		cout << ((y4 - y3) / 2 + 1) * ((x4 - x3) / 2) + ((y4 - y3) / 2) * ((x4 - x3) / 2 + 1);

}

ll nsd(ll a, ll b)
{
	return (a != 0) ? nsd(b % a, a) : b;
}

void include_files()
{
	freopen_s(&stream, "input.txt", "r", stdin);
	//freopen_s(&stream, "output.txt", "w", stdout);
}

int main()
{
	//srand(time(0));
	//include_files();
	solution();
	std::cout << endl;
	return 0;
}