#include <bits/stdc++.h>
using namespace std;
const int N = 128;
int n, x;
double p[N];
struct Mat {
  static const int N = ::N;
  double a[N][N];
  Mat() {}
  Mat(double v) {
    for (int i = (0); i < (N); i++)
      for (int j = (0); j < (N); j++) a[i][j] = i == j ? v : 0;
  }
  void print() {
    for (int i = (0); i < (4); i++) {
      for (int j = (0); j < (4); j++) cout << a[i][j] << " ";
      cout << "\n";
    }
    cout << "\n";
  }
  Mat operator*(Mat &c) {
    Mat res(0);
    for (int i = (0); i < (N); i++)
      for (int j = (0); j < (N); j++)
        for (int k = (0); k < (N); k++) res.a[i][j] += a[i][k] * c.a[k][j];
    return res;
  }
  Mat operator^(int b) const {
    Mat res(1);
    Mat a = *this;
    while (b) {
      if (b & 1) res = res * a;
      a = a * a;
      b >>= 1;
    }
    return res;
  }
  void build() {
    for (int i = (0); i < (N); i++)
      for (int j = (0); j < (N); j++) a[i][j] = p[i ^ j];
  }
} mat;
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> x;
  for (int i = (0); i < (x + 1); i++) cin >> p[i];
  mat.build();
  mat = mat ^ n;
  double ans = 1 - mat.a[0][0];
  cout << setiosflags(ios::fixed);
  cout << setprecision(10);
  cout << ans << "\n";
  return 0;
}
