#include<iostream>
#include<cmath>
using namespace std;
int main(){
	long long a[4];
	for(int i=0;i<4;i++)
		cin>>a[i];
	if(a[1]==a[3]&&a[2]==a[0])
		cout<<"0";
	else if(a[0]+a[1]==a[2]+a[3])
		cout<<"1";
	else if(a[0]-a[1]==a[2]-a[3])
		cout<<"1";
	else if(abs(a[0]-a[2])+abs(a[1]-a[3])<=3)
		cout<<"1";
	else if((a[0]+a[1])%2==(a[3]+a[2])%2)
		cout<<"2";
	else if(abs(a[0]-a[2])+abs(a[1]-a[3])<=6)
		cout<<"2";
	else if(
		abs(a[0]-a[2]+1)==abs(a[1]-a[3])||
		abs(a[0]-a[2]-1)==abs(a[1]-a[3])||
		abs(a[0]-a[2])==abs(a[1]-a[3]+1)||
		abs(a[0]-a[2])==abs(a[1]-a[3]-1)||	
		abs(a[0]-a[2]+3)==abs(a[1]-a[3])||
		abs(a[0]-a[2]-3)==abs(a[1]-a[3])||
		abs(a[0]-a[2])==abs(a[1]-a[3]+3)||
		abs(a[0]-a[2])==abs(a[1]-a[3]-3))
		cout<<"2";
	else 
		cout<<"3";
	return 0;
}

#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

#define NOT_FOUND -1
#define rep(i, n) for(int i = 0; i < (int)(n); i++)

int main() {
    int N;
    cin >> N;
    if(N % 2) {
        cout << "Black" << endl;
    } else {
        cout << "White" << endl;
    }
    return 0;
}

void swap(int *a, int *b) {
    *b = *a - *b;
    *a -= *b;
    *b += *a;
}

int sosu_judge(int N) {
    /*素数ならば1
      素数でなければ0を返す
    */
    int i, j;

    if(N == 2)
        return 1;
    if(N % 2 == 0)
        return 0;

    for(i = 3; i < N && N % i != 0; i += 2)
        ;

    if(i >= N)
        return 1;

    return 0;
}

int factorial(int N) { // Nの階乗を求める関数
    int ans = 1;

    while(N--)
        ans *= (N + 1);
    return ans;
}

//クイックソートをする関数
void q_sort(int a[], int first, int last) {
    int i, j;
    int x, t;

    x = a[(first + last) / 2];
    i = first;
    j = last;

    while(1) {
        while(a[i] < x)
            i++;
        while(x < a[j])
            j--;

        if(i >= j)
            break;

        swap(&a[i], &a[j]);
        i++;
        j--;
    }
    if(first < i - 1)
        q_sort(a, first, i - 1);
    if(last > j + 1)
        q_sort(a, j + 1, last);
}

int b_search(int target, int array[], int right, int left) {
    /*二分探索を行う関数である。
  戻り値は探索したい値の格納されている位置である。
  もし値が存在しない場合、NOT_FOUND(-1)を返す
  */
    int mid;
    while(left < right) {
        mid = (right + left) / 2;
        if(array[mid] < target)
            left = mid + 1;
        else
            right = mid;
    }
    if(array[mid] == target)
        return mid;
    return NOT_FOUND;
}

unsigned long combination(int n, int r) {
    /*nCrの値を求める関数である。
  値が巨大になる可能性があるため、戻り地はunsigned longである
  */
    int i, j;
    unsigned long a[17];

    if(n - r < r)
        r = n - r;
    if(r == 0)
        return 1;
    if(r == 1)
        return n;
    if(r > 17)
        return 0;
    for(i = 1; i < r; i++)
        a[i] = i + 2;
    for(i = 3; i <= n - r + 1; i++) {
        a[0] = i;
        for(j = 1; j < r; j++)
            a[j] += a[j - 1];
    }
    return a[r - 1];
}
