#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
void ckmin(T &a, U b) {
  if (a > b) a = b;
}
template <class T, class U>
void ckmax(T &a, U b) {
  if (a < b) a = b;
}
int N;
pair<long long, long long> arr[200013];
long long A, P;
double ans;
long long gcd(long long a, long long b) {
  return ((b == 0) ? a : gcd(b, a % b));
}
long long get(pair<long long, long long> a, pair<long long, long long> b) {
  b.first -= a.first;
  b.second -= a.second;
  long long g = gcd(abs(b.first), abs(b.second));
  return g;
}
long long area(pair<long long, long long> a, pair<long long, long long> b,
               pair<long long, long long> c) {
  a.first -= b.first;
  a.second -= b.second;
  c.first -= b.first;
  c.second -= b.second;
  return abs(a.first * c.second - a.second * c.first);
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(10);
  cerr << fixed << setprecision(4);
  cin >> N;
  for (auto i = (0); i < (N); i++) {
    int x, y;
    cin >> x >> y;
    arr[i] = {x, y};
    arr[i + N] = arr[i];
  }
  for (auto i = (2); i < (N); i++) {
    A += area(arr[0], arr[i - 1], arr[i]);
  }
  for (auto i = (0); i < (N); i++) {
    P += get(arr[i], arr[i + 1]);
  }
  ans = 0.5 * (A - P + 2);
  for (auto i = (0); i < (N); i++) {
    A = 0;
    P = get(arr[i], arr[i + 1]);
    double prob = 0.25;
    long long tot;
    if (N <= 50) {
      tot = ((1ll << N) - ((N * (N - 1)) >> 1) - N - 1);
    }
    for (int j = i + 2; j < i + N - 1 && j < i + 60; j++) {
      if (N > 50) {
        prob *= 0.5;
      } else {
        prob = 1.0 * ((1ll << (N - (j - i + 1))) - 1) / tot;
      }
      A += area(arr[i], arr[j - 1], arr[j]);
      P += get(arr[j - 1], arr[j]);
      long long pp = get(arr[i], arr[j]);
      double lose = pp + 0.5 * (A - (P + pp));
      ans -= prob * lose;
    }
  }
  cout << ans << '\n';
}
