#include <bits/stdc++.h>
using namespace std;
pair<long long, long long> tab[200010];
long long gcd(long long a, long long b) {
  while (b > 0) {
    swap(a, b);
    b %= a;
  }
  return a;
}
inline long long ilo(pair<long long, long long> a, pair<long long, long long> b,
                     pair<long long, long long> sr) {
  a.first -= sr.first;
  a.second -= sr.second;
  b.first -= sr.first;
  b.second -= sr.second;
  return abs(a.first * b.second - a.second * b.first);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout << fixed << setprecision(10);
  int n, i, j;
  long long pom, pole, kra, pot, mian;
  double ws, w;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> tab[i].first >> tab[i].second;
    tab[n + i] = tab[i];
  }
  if (n <= 50) {
    pot = 1;
    for (i = 1; i <= n; i++) pot *= 2;
    mian = pot - 1 - n - ((n * (n - 1)) / 2);
    pot /= 4;
  } else {
    ws = 1 + n + ((n * (n - 1)) / 2);
    for (i = 1; i <= n - 2; i++) ws /= 2;
    ws = (double)4 - ws;
    ws = ((double)1) / ws;
  }
  w = 0;
  for (i = 1; i <= min(30, n - 3); i++) {
    if (n <= 50) {
      ws = ((double)(pot - n + i)) / mian;
      pot /= 2;
    }
    for (j = 1; j <= n; j++) {
      pole = abs(ilo(tab[i + j], tab[i + j + 1], tab[j]));
      kra = gcd(abs(tab[i + j].first - tab[j].first),
                abs(tab[i + j].second - tab[j].second)) +
            gcd(abs(tab[i + j].first - tab[i + j + 1].first),
                abs(tab[i + j].second - tab[i + j + 1].second)) +
            gcd(abs(tab[i + j + 1].first - tab[j].first),
                abs(tab[i + j + 1].second - tab[j].second));
      pom =
          ((pole - kra) / 2) + gcd(abs(tab[i + j + 1].first - tab[j].first),
                                   abs(tab[i + j + 1].second - tab[j].second));
      w += ws * pom;
    }
    if (n > 50) ws /= 2;
  }
  pole = 0;
  for (i = 2; i < n; i++)
    pole += abs(ilo(tab[i], tab[i + 1], tab[1])) -
            gcd(abs(tab[i].first - tab[i - 1].first),
                abs(tab[i].second - tab[i - 1].second));
  pole -= gcd(abs(tab[n].first - tab[n - 1].first),
              abs(tab[n].second - tab[n - 1].second));
  pole -=
      gcd(abs(tab[n].first - tab[1].first), abs(tab[n].second - tab[1].second));
  pole /= 2;
  pole++;
  w = (double)pole - w;
  cout << w;
  return 0;
}
