#include <bits/stdc++.h>
using namespace std;
const int M = 10005;
int n;
pair<int, int> LR[10];
double second[2][M];
void solve() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &LR[i].first, &LR[i].second);
  }
  double ans = 0;
  for (int k = 0; k < (1 << n) - 1; ++k) {
    for (int i = 0; i < M; ++i) {
      second[0][i] = second[1][i] = 1;
      for (int j = 0; j < n; ++j) {
        bool ID = k & (1 << j);
        if (ID == 1) {
          int len = min(LR[j].second, i) - LR[j].first + 1;
          if (len <= 0)
            second[ID][i] = 0;
          else
            second[ID][i] *= len * 1.0 / (LR[j].second - LR[j].first + 1);
        } else {
          if (i < LR[j].first || i > LR[j].second)
            second[ID][i] = 0;
          else
            second[ID][i] *= 1.0 / (LR[j].second - LR[j].first + 1);
        }
      }
      if (i) second[0][i] += second[0][i - 1];
    }
    int c = 0;
    for (int i = 0; i < n; ++i)
      if (k & (1 << i)) c++;
    if (c < n - 1) {
      for (int mx = 1; mx < M; ++mx) {
        double p1 = second[0][mx] - second[0][mx - 1];
        double p2 = second[1][mx - 1];
        ans += p1 * p2 * mx;
      }
    } else {
      for (int mi = 0; mi < M; ++mi) {
        double p1 = second[0][M - 1] - second[0][mi];
        double p2 = mi == 0 ? second[1][0] : second[1][mi] - second[1][mi - 1];
        ans += p1 * p2 * mi;
      }
    }
  }
  printf("%.10f", ans);
}
int main() { solve(); }
