#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double EPS = 1e-7;
const int INF = 1000000000;
pair<int, int> a[100];
int n;
int exactly(int c, int x) {
  if (a[x].first <= c && a[x].second >= c) return 1;
  return 0;
}
int more(int c, int x) {
  int L = max(a[x].first, c + 1);
  if (a[x].second > c) return a[x].second - L + 1;
  return 0;
}
int lesss(int c, int x) {
  int U = min(a[x].second, c - 1);
  if (a[x].first < c) return U - a[x].first + 1;
  return 0;
}
double get(double count, int cnt, int c, int f) {
  double res = 0;
  count /= cnt + 1;
  count /= cnt;
  res += count * exactly(c, f);
  count *= cnt;
  count *= cnt + 1;
  count /= cnt;
  res += count * more(c, f);
  return res;
}
double get(int s, int c, int f) {
  if (a[f].second < c) return 0;
  vector<int> rest;
  for (int i = 0; i < n; i++) {
    if (i != s && i != f) rest.push_back(i);
  }
  double res = 0;
  for (int i = 0; i < (1 << rest.size()); i++) {
    double count = 1;
    int cnt = 1;
    for (int j = 0; j < rest.size(); j++) {
      if (i & (1 << j))
        count *= exactly(c, rest[j]), cnt++;
      else
        count *= lesss(c, rest[j]);
    }
    res += get(count, cnt, c, f);
  }
  res *= c;
  double d = 1;
  res /= d;
  return res;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].first >> a[i].second;
  }
  double res = 0;
  for (int i = 0; i < n; i++) {
    for (int j = a[i].first; j <= a[i].second; j++) {
      for (int k = 0; k < n; k++) {
        if (i == k) continue;
        double c = get(i, j, k);
        res += c;
      }
    }
  }
  double d = 1;
  for (int i = 0; i < n; i++) {
    d *= (a[i].second - a[i].first + 1);
  }
  res /= d;
  printf("%.13f\n", res);
}
