#include <bits/stdc++.h>
using namespace std;
int l[10], r[10], n;
long double dp[40][20000], p[40][20000], psum[40][20000], ans, res;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> l[i] >> r[i];
  for (int mask = 1; mask < (1 << n); mask++) {
    res = 0.;
    for (int i = 1; i <= 10000; i++) {
      p[mask][i] = 1.;
      for (int j = 0; j < n; j++) {
        if ((mask & (1 << j))) {
          if (l[j] > i) {
            p[mask][i] = 0.;
            break;
          } else {
            p[mask][i] *= (min((long double)i, (long double)r[j]) -
                           (long double)l[j] + 1.) /
                          ((long double)r[j] - (long double)l[j] + 1.);
          }
        }
      }
      p[mask][i] -= res;
      dp[mask][i] = dp[mask][i - 1] + p[mask][i] * (long double)i;
      res += p[mask][i];
      psum[mask][i] = res;
    }
  }
  for (int i = 0; i <= 10000; i++) p[0][i] = psum[0][i] = 1.;
  for (int mask = 1; mask < (1 << n); mask++) {
    int cnt = __builtin_popcount(mask);
    int nw = (1 << n) - 1 - mask;
    if (cnt > 1) {
      for (int i = 1; i <= 10000; i++) {
        long double p1 = 1.;
        for (int j = 0; j < n; j++) {
          if ((mask & (1 << j))) {
            if (l[j] > i || r[j] < i) {
              p1 = 0.;
              break;
            } else {
              p1 *= 1. / ((long double)r[j] - (long double)l[j] + 1.);
            }
          }
        }
        p1 *= psum[nw][i - 1];
        ans += p1 * (long double)i;
      }
    } else {
      int pos = -1;
      for (int j = 0; j < n; j++) {
        if ((mask & (1 << j))) {
          pos = j;
          break;
        }
      }
      long double add = 1. / ((long double)r[pos] - (long double)l[pos] + 1.);
      for (int i = l[pos]; i <= r[pos]; i++) {
        long double now = add * dp[nw][i - 1];
        ans += now;
      }
    }
  }
  cout << setprecision(9) << fixed << ans << endl;
  return 0;
}
