#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
int n;
pair<int, int> a[10];
double sum = 0;
double var = 0;
double divisor = 0;
void calc1(int cost) {
  for (int i = 0; i < n; i++)
    if (a[i].second > cost) {
      double tmp1 = 1;
      for (int j = 0; j < n; j++)
        if (j != i) tmp1 *= max((min(cost, a[j].second) - a[j].first + 1), 0);
      double tmp2 = 1;
      for (int j = 0; j < n; j++)
        if (j != i)
          tmp2 *= max((min(cost - 1, a[j].second) - a[j].first + 1), 0);
      double tmp =
          max(0.0, (tmp1 - tmp2)) * (a[i].second - max(cost, a[i].first - 1));
      double T = tmp * cost;
      T /= divisor;
      sum += T;
      var += tmp;
    }
}
void calc2(int cost) {
  for (int i = 0; i < n; i++)
    if (a[i].second >= cost && a[i].first <= cost)
      for (int j = i + 1; j < n; j++)
        if (i != j && a[j].second >= cost && a[j].first <= cost) {
          double tmp = 1;
          for (int k = 0; k < n; k++)
            if (k != i && k != j)
              tmp *= max(0, min(cost, a[k].second + 1) - a[k].first);
          double T = tmp * cost;
          T /= divisor;
          sum += T;
          var += tmp;
        }
}
void calc3(int cost) {
  if (n < 3) return;
  for (int i = 0; i < n; i++)
    if (a[i].second >= cost && a[i].first <= cost)
      for (int i2 = i + 1; i2 < n; i2++)
        if (a[i2].second >= cost && a[i2].first <= cost)
          for (int i3 = i2 + 1; i3 < n; i3++)
            if (a[i3].second >= cost && a[i3].first <= cost) {
              double tmp = 1;
              for (int k = 0; k < n; k++)
                if (k != i && k != i2 && k != i3)
                  tmp *= max(0, min(cost, a[k].second + 1) - a[k].first);
              double T = tmp * cost;
              T /= divisor;
              sum += T;
              var += tmp;
            }
}
void calc4(int cost) {
  if (n < 4) return;
  for (int i = 0; i < n; i++) {
    double tmp = max(0, min(cost, a[i].second + 1) - a[i].first);
    for (int j = 0; j < n && tmp; j++)
      if (i != j && (a[j].second < cost || a[j].first > cost)) tmp = 0;
    double T = tmp * cost;
    T /= divisor;
    sum += T;
    var += tmp;
  }
}
void calc5(int cost) {
  if (n < 5) return;
  int tmp = 1;
  for (int i = 0; i < n && tmp; i++)
    if (a[i].first > cost || a[i].second < cost) tmp = 0;
  double T = tmp * cost;
  T /= divisor;
  sum += T;
  var += tmp;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  srand(__rdtsc());
  cout << fixed;
  cout << setprecision(12);
  cin >> n;
  int l, r;
  for (int i = 0; i < n; i++) {
    cin >> l >> r;
    a[i] = make_pair((l), (r));
  }
  divisor = 1;
  for (int i = 0; i < n; i++) divisor *= (a[i].second - a[i].first + 1);
  for (int cost = 10000; cost > 0; cost--) {
    calc1(cost);
    calc2(cost);
    calc3(cost);
    calc4(cost);
    calc5(cost);
  }
  double ans = sum;
  cout << ans << endl;
  return 0;
}
