#include <bits/stdc++.h>
const int oo = 0x3f3f3f3f;
template <typename T>
inline bool chkmax(T &a, T b) {
  return a < b ? a = b, true : false;
}
template <typename T>
inline bool chkmin(T &a, T b) {
  return a > b ? a = b, true : false;
}
template <typename T>
T read(T &first) {
  int f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (first = 0; isdigit(ch); ch = getchar()) first = 10 * first + ch - '0';
  return first *= f;
}
template <typename T>
void write(T first) {
  if (first == 0) {
    putchar('0');
    return;
  }
  if (first < 0) {
    putchar('-');
    first = -first;
  }
  static char s[20];
  int top = 0;
  for (; first; first /= 10) s[++top] = first % 10 + '0';
  while (top) putchar(s[top--]);
}
const int MAXN = 2e5 + 5;
const int CNT = 60;
int N;
std::pair<int, int> A[MAXN];
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline int count(int i, int j) {
  return gcd(std::abs(A[j].first - A[i].first),
             std::abs(A[j].second - A[i].second));
}
inline long long cross(const std::pair<int, int> &a,
                       const std::pair<int, int> &b) {
  return (long long)a.first * b.second - (long long)a.second * b.first;
}
void input() {
  read(N);
  for (int i = 0; i < N; ++i) {
    read(A[i].first);
    read(A[i].second);
  }
}
void solve() {
  memcpy(A + N, A, sizeof(*A) * N);
  long long a = 0, b = 0;
  for (int i = 0; i < N; ++i) {
    a += cross(A[i], A[i + 1]);
    b += count(i, i + 1);
  }
  long double coef[MAXN];
  long double tnn = pow((long double)2, -N);
  for (int i = 2; i <= CNT && i < N - 1; ++i) {
    coef[i] = pow((long double)2, -i - 1) - tnn;
  }
  long double ans = 0.5 * a - 0.5 * b + 1;
  long double contrib = 0;
  for (int i = 0; i < N; ++i) {
    a = cross(A[i], A[i + 1]);
    b = count(i, i + 1);
    for (int k = 2; k <= CNT && k < N - 1; ++k) {
      int j = i + k;
      a += cross(A[j - 1], A[j]);
      b += count(j - 1, j);
      long long a0 = cross(A[j], A[i]);
      long long b0 = count(j, i);
      contrib += (0.5 * (a + a0) - 0.5 * (b + b0) + b0) * coef[k];
    }
  }
  ans -= contrib / (1 - tnn - N * tnn - (long long)N * (N - 1) / 2 * tnn);
  printf("%.15f\n", (double)ans);
}
int main() {
  input();
  solve();
  return 0;
}
