#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;   }   