#include <bits/stdc++.h>
using namespace std;
int gcd(int x, int y) {
  if (x > y) swap(x, y);
  return (x == 0) ? y : gcd(y % x, x);
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(10);
  int N;
  cin >> N;
  vector<pair<long long, long long> > P(N + 47, make_pair(0, 0));
  for (int i = 0; i < N; i++) cin >> P[i].first >> P[i].second;
  vector<long double> pw2(N + 47, 1);
  for (int i = 1; i <= N + 9; i++) pw2[i] = pw2[i - 1] / 2;
  vector<long double> S1x(N, 0), S1y(N, 0);
  for (int i = 0; i < N; i++) {
    S1x[i] = ((i == 0) ? 0 : S1x[i - 1]) + pw2[i] * P[i].first;
    S1y[i] = ((i == 0) ? 0 : S1y[i - 1]) + pw2[i] * P[i].second;
  }
  long double sumA = 0;
  for (int i = 0; i < N; i++)
    sumA += S1y[i] * (P[i + 2].first - P[i + 1].first) * pw2[3];
  for (int i = 0; i < N; i++)
    sumA -= S1x[i] * (P[i + 2].second - P[i + 1].second) * pw2[3];
  for (int i = 1; i < N; i++) sumA += S1y[i - 1] * P[i].first * pw2[2 - i + N];
  for (int i = 1; i < N; i++) sumA -= S1x[i - 1] * P[i].second * pw2[2 - i + N];
  for (int i = 2; i < N; i++)
    sumA += P[i].first * (P[i - 1].second - P[0].second) * pw2[2 + i];
  for (int i = 2; i < N; i++)
    sumA -= P[i].second * (P[i - 1].first - P[0].first) * pw2[2 + i];
  for (int i = 1; i < N; i++)
    for (int k = i + 1; k < min(i + 120, N); k++)
      sumA += (P[k].second * P[i].first - P[k].first * P[i].second) *
              pw2[2 + k - i];
  long double sumB = 0;
  for (int i = 0; i < N; i++)
    for (int j = i + 1; j < min(N, i + 80); j++) {
      long long b =
          gcd(((P[i].first - P[j].first < 0) ? -(P[i].first - P[j].first)
                                             : P[i].first - P[j].first),
              ((P[i].second - P[j].second < 0) ? -(P[i].second - P[j].second)
                                               : P[i].second - P[j].second));
      sumB += b * pw2[N + 2 - j + i] + b * pw2[2 + j - i] - 2 * b * pw2[N + 1];
    }
  for (int i = 0; i < 80; i++)
    for (int j = i + 80; j < N; j++) {
      long long b =
          gcd(((P[i].first - P[j].first < 0) ? -(P[i].first - P[j].first)
                                             : P[i].first - P[j].first),
              ((P[i].second - P[j].second < 0) ? -(P[i].second - P[j].second)
                                               : P[i].second - P[j].second));
      sumB += b * pw2[N + 2 - j + i] + b * pw2[2 + j - i] - 2 * b * pw2[N + 1];
    }
  long double res = (sumA - sumB);
  res /= 1 - 1.0 * (1 + N + 1LL * N * (N - 1) / 2) * pw2[N];
  cout << res + 1 << "\n";
  return 0;
}
