#include <bits/stdc++.h>
using namespace std;
double EPS = 1e-20;
long long n;
long long x[100010], y[100010];
int lookAhead = 50;
long long gcd(long long a, long long b) {
  long long tmp;
  while (b) {
    a %= b;
    tmp = a;
    a = b;
    b = tmp;
  }
  return a;
}
int countPointsOnSegment(int i, int j) {
  return abs(gcd(x[i] - x[j], y[i] - y[j]));
}
int d(int i, int j) {
  if (j > i) return j - i;
  return n + j - i;
}
double p2[5000] = {0};
int offset = 1500;
void initPowers() {
  double res = 1;
  for (int i = 0; i < 3010; i++) {
    p2[offset + i] = res;
    res *= 2;
  }
  res = 1;
  for (int i = 0; i > -1010; i--) {
    p2[offset + i] = res;
    res /= 2;
    if (res < EPS) break;
  }
}
double pow2(int m) { return p2[offset + m]; }
double ExactArea() {
  double res = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      double term = pow2(-1 - d(i, j));
      if (term == 0) continue;
      term *= (x[i] * y[j] - x[j] * y[i]);
      res += term;
    }
  res /= 2;
  double shrinkFactor = (1 + n + n * (n - 1) / 2) * pow2(-n);
  shrinkFactor = 1.0 / (1 - shrinkFactor);
  return res * shrinkFactor;
}
double approxArea() {
  double res = 0;
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < i + lookAhead; j++) {
      double term = pow2(-1 - d(i, j));
      term *= (x[i] * y[j % n] - x[j % n] * y[i]);
      res += term;
    }
  res /= 2.0;
  return res;
}
double approxB() {
  double res = 0;
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < i + lookAhead; j++) {
      double term = pow2(-1 - d(i, j));
      term *= (countPointsOnSegment(i, j % n));
      res += term;
    }
  return res;
}
double ExactEB() {
  double res = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      double term = pow2(-1 - d(i, j));
      term *= (countPointsOnSegment(i, j));
      res += term;
    }
  double twoOffset = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      twoOffset += pow2(-n) * countPointsOnSegment(i, j);
    }
  res -= twoOffset;
  double shrinkFactor = (1 + n + n * (n - 1) / 2) * pow2(-n);
  shrinkFactor = 1.0 / (1 - shrinkFactor);
  return res * shrinkFactor;
}
int main() {
  initPowers();
  cout.precision(15);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i];
  }
  if (n < 1000) {
    cout << ExactArea() - ExactEB() / 2 + 1 << endl;
    return 0;
  }
  cout << approxArea() - approxB() / 2 + 1 << endl;
  return 0;
}
