//#include <atcoder/all>
#include <bits/stdc++.h>
//using namespace atcoder;
using namespace std;
typedef long long ll;

#define MOD (long long)(1e9+7)
#define INF (1LL<<60)
#define rep(i,n) for(ll i = 0; i < (n); i++)
#define rep1(i,n) for(ll i = 1; i <= (n); i++)

template<class T> inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template<class T> inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}


// 最大公約数
ll gcd(ll a, ll b)
{
  if(b == 0) return a;
  return gcd(b, a % b);
}

// mod m におけるa の逆元
ll modinv(ll a, ll m) {
  ll b = m, u = 1, v = 0;
  while (b) {
    ll t = a / b;
    a -= t * b; swap(a, b);
    u -= t * v; swap(u, v);
  }
  u %= m;
  if (u < 0) u += m;
  return u;
}

// 素因数分解
vector<pair<ll, ll>> prim;
void pf(ll n)
{
  ll s = sqrt(n);
  ll r = 0;
  for(ll i = 2; i <= s; i++) {
    if((n % i) == 0) {
      r = 0;
      do {
	r++;
	n = n / i;
      } while((n % i) == 0);
      prim.push_back({i, r});
    }
  }
  if(n > s) {
    prim.push_back({n, 1});
  }
}

// ２項係数
/*
ll ncrmod(ll n, ll r)
{
  ll ans;
  
  return ans;
}
*/

// 繰り返し二乗法
ll powmod(int a, int n){//aのn乗を計算します(MOD)。
  ll x = 1;
  while(n > 0){//全てのbitが捨てられるまで。
    if(n&1){//1番右のbitが1のとき。
      x = (x*a) % MOD;
    }
    a = (a*a) % MOD;
    n >>= 1;//bit全体を右に1つシフトして一番右を捨てる。
  }
  return x;
}


ll f(ll a, ll b)
{
  ll ret;
  if(a > b) ret = a * 1000000 + b;
  else ret = b * 1000000 + a;
  return ret;
}

void solve()
{
  ll N; cin >> N;
  vector<ll> x(N), y(N); rep(i, N) cin >> x[i] >> y[i];
  vector<pair<ll,ll>> x1;
  vector<pair<ll,ll>> y1;
  rep(i, N) {
	x1.push_back({x[i], i});
	y1.push_back({y[i], i});
  }
  sort(x1.begin(), x1.end());
  sort(y1.begin(), y1.end());
  vector<pair<ll,ll>> m;
  m.push_back({x1[N-1].first-x1[0].first, f(x1[N-1].second, x1[0].second)});
  m.push_back({x1[N-2].first-x1[0].first, f(x1[N-2].second, x1[0].second)});
  m.push_back({x1[N-1].first-x1[1].first, f(x1[N-1].second, x1[1].second)});


  m.push_back({y1[N-1].first-y1[0].first, f(y1[N-1].second, y1[0].second)});
  m.push_back({y1[N-2].first-y1[0].first, f(y1[N-2].second, y1[0].second)});
  m.push_back({y1[N-1].first-y1[1].first, f(y1[N-1].second, y1[1].second)});



  sort(m.rbegin(), m.rend());

  if(m[0].second != m[1].second) {
  cout << m[1].first << endl;
  } else {
	cout << m[2].first << endl; 
  }
  
}


int main(void)
{
  // ll t; cin >> t; rep(i, t)
  solve();
}

#include <bits/stdc++.h>
using namespace std;

#define vi vector<int>
#define ff first
#define ss second
#define pb push_back
#define setbits(x) __builtin_popcountll(x)
#define zrobits(x) __builtin_ctzll(x)
#define ps(x) fixed << setprecision(10) << x
#define mod 1000000007
#define inf 1e18
#define w(tc)  int tc; cin >> tc; for (int i = 1; i <= tc; ++i)
#define PI 3.14159265358979323846264338327950L
#define span(a) begin(a), end(a)
#define ll long long

const int N = 109;
double dp[N][N][N];

double calc(int a, int b, int c) {
	if (a >= 100 or b >= 100 or c >= 100)
		return 0;

	if (dp[a][b][c] >= 0) return dp[a][b][c];

	double tot = a + b + c;
	dp[a][b][c] = 1 + a / tot * calc(a + 1, b, c) + b / tot * calc(a, b + 1, c) + c / tot * calc(a, b, c + 1);

	return dp[a][b][c];
}

inline void solve() {
	memset(dp, -1, sizeof(dp));
	int a, b, c; cin >> a >> b >> c;
	double ans = calc(a, b, c);
	cout << ps(ans);
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	//w(tc)
	solve();
	return 0;
}