#include <bits/stdc++.h>
using namespace std;
const int INF = numeric_limits<int>::max();
const int MINF = numeric_limits<int>::min();
const int HALF_INF = (INF / 2 - 1);
const int EPS = 1e-9;
const int dy[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dx[] = {0, 1, 1, 1, 0, -1, -1, -1};
const int pi = 3.1415926535897932384626;
int n;
int l[6], r[6];
int max_l, max_r;
double dp[7][7][7];
int main() {
  cout << setprecision(10) << fixed;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> l[i] >> r[i];
  }
  double ans = 0;
  for (int bid = 1; bid <= 10001; bid++) {
    memset(dp, 0, sizeof dp);
    dp[0][0][0] = 1.0;
    for (int i = 0; i < n; i++) {
      double p = 1.0 / (r[i] - l[i] + 1);
      for (int great = 0; great < 2; great++) {
        for (int eq = 0; eq <= n; eq++) {
          int til = min(bid - 1, r[i]);
          if (l[i] <= til) {
            dp[i + 1][great][eq] +=
                dp[i][great][eq] * (double)(til - l[i] + 1) * p;
          }
          if (r[i] >= bid && l[i] <= bid)
            dp[i + 1][great][eq + 1] += dp[i][great][eq] * p;
          til = max(bid + 1, l[i]);
          if (r[i] >= til) {
            dp[i + 1][great + 1][eq] +=
                dp[i][great][eq] * (double)(r[i] - til + 1) * p;
          }
        }
      }
    }
    double p_bid = 0;
    for (int great = 0; great < 2; great++)
      for (int eq = 1; eq <= n; eq++)
        if (great == 1 || (great == 0 && eq >= 2)) p_bid += dp[n][great][eq];
    ans += p_bid * bid;
  }
  cout << ans << endl;
  return 0;
}
