#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
string toBin(long long a) {
  string res = "";
  while (a) {
    res += char((a & 1) + '0');
    a >>= 1;
  }
  reverse(res.begin(), res.end());
  return res;
}
const int mod = 1e9 + 7;
long long expo(long long base, long long pow) {
  long long ans = 1;
  while (pow != 0) {
    if (pow & 1 == 1) {
      ans = ans * base;
      ans = ans % mod;
    }
    base *= base;
    base %= mod;
    pow /= 2;
  }
  return ans;
}
long long inv(long long x) { return expo(x, mod - 2); }
bool isPal(string ss) {
  int len = ss.length();
  for (int i = 0; i < len / 2; i++) {
    int comp = len - i - 1;
    if (ss[i] != ss[comp]) return false;
  }
  return true;
}
double pi = 3.141592653589793238462643;
double error = 0.0000001;
const int M = 100001;
int aa = 100;
int done[10][10];
void doit(int presx, int presy, int desx, int desy, int steps) {
  cout << presx << "  " << presy << "  " << steps << endl;
  if (steps > 8) return;
  if (presx == desx && presy == desy) {
    aa = min(aa, steps);
    return;
  }
  if ((presx + 1) < 9 && (presy - 1) > 0) {
    if (done[presx + 1][presy - 1] == 0)
      doit(presx + 1, presy - 1, desx, desy, steps + 1);
  }
  if ((presx - 1) > 0 && (presy - 1) > 0) {
    if (done[presx - 1][presy - 1] == 0)
      doit(presx - 1, presy - 1, desx, desy, steps + 1);
  }
  if ((presx + 1) < 9 && (presy + 1) < 9) {
    if (done[presx + 1][presy + 1] == 0)
      doit(presx + 1, presy + 1, desx, desy, steps + 1);
  }
  if ((presx - 1) > 0 && (presy + 1) < 9) {
    if (done[presx - 11][presy + 1] == 0)
      doit(presx - 1, presy + 1, desx, desy, steps + 1);
  }
  if ((presx - 1) > 0) {
    if (done[presx - 1][presy] == 0)
      doit(presx - 1, presy, desx, desy, steps + 1);
  }
  if ((presx + 1) < 9) {
    if (done[presx + 1][presy] == 0)
      doit(presx + 1, presy, desx, desy, steps + 1);
  }
  if ((presy + 1) < 9) {
    if (done[presx][presy + 1] == 0)
      doit(presx, presy + 1, desx, desy, steps + 1);
  }
  if ((presy - 1) > 0) {
    if (done[presx][presy - 1] == 0)
      doit(presx, presy - 1, desx, desy, steps + 1);
  }
}
int main() {
  int r1, c1, r2, c2;
  cin >> r1 >> c1 >> r2 >> c2;
  int ans1, ans2, ans3;
  if (r1 == r2 || c1 == c2)
    ans1 = 1;
  else
    ans1 = 2;
  int rem1 = (r1 + c1) % 2;
  int rem2 = (r2 + c2) % 2;
  if (rem1 != rem2) {
    ans2 = 0;
  } else {
    if (((c2 - c1) == (r2 - r1)) || (c2 - c1) == (r1 - r2)) {
      ans2 = 1;
    } else {
      ans2 = 2;
    }
  }
  aa = max(abs(r1 - r2), abs(c1 - c2));
  cout << ans1 << " " << ans2 << " " << aa;
}
