#include <bits/stdc++.h>
using namespace std;
int L[7], R[7];
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> L[i] >> R[i];
  }
  long double cases = 0;
  long double sum = 0;
  for (int p = 1; p <= 10000; ++p) {
    for (int mask = 3; mask < 1 << n; ++mask) {
      bool ok = true;
      long double cnt = 1;
      for (int j = 1; j <= n; ++j)
        if (!((mask >> (j - 1)) & 1)) {
          if (L[j] < p) {
            cnt *= min(p - 1, R[j]) - L[j] + 1;
          } else {
            ok = false;
          }
        }
      if (!ok) continue;
      vector<pair<bool, int>> ranges;
      for (int j = 1; j <= n; ++j)
        if ((mask >> (j - 1)) & 1) {
          if (p <= R[j]) {
            ranges.push_back(make_pair(L[j] <= p, R[j] - max(p + 1, L[j]) + 1));
          } else {
            ok = false;
          }
        }
      if (!ok) continue;
      long double cnt2 = 0;
      for (int j = 0; j < int(ranges.size()); ++j) {
        bool ok = true;
        for (int k = 0; k < int(ranges.size()); ++k)
          if (k != j)
            if (!ranges[k].first) ok = false;
        if (ok) {
          cnt2 += ranges[j].second;
        }
      }
      int b = 0;
      for (int tmp = mask; tmp; tmp &= tmp - 1) ++b;
      if (b < 2) continue;
      bool add = true;
      for (int j = 0; j < int(ranges.size()); ++j) {
        add &= ranges[j].first;
      }
      cnt *= (cnt2 + add);
      cases += cnt;
      sum += cnt * p;
    }
  }
  cout << fixed << setprecision(15) << 1.0 * sum / cases;
}
