#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
const long long INF = 1LL * inf * inf;
const double eps = 1e-9;
const int md = (int)1e9 + 7;
const double EPS = 1e-7;
const long long maxll = numeric_limits<long long>::max();
const double PI = acos(-1.0);
template <typename name>
inline name sqr(name x) {
  return x * x;
}
inline long long multmod(long long a, long long b, long long md) {
  if (!a) return 0;
  if (a % 2 == 1)
    return (multmod(a - 1, b, md) + b) % md;
  else
    return sqr<long long>(multmod(a / 2, b, md)) % md;
}
template <typename name>
inline name bpow(name base, long long exp) {
  name res = base;
  while (exp) {
    if (exp % 2 == 1) {
      res = res * base;
    }
    base = base * base;
    exp /= 2;
  }
  return res;
}
int n, x, m;
double p[2000];
struct matr {
  double a[1 << 7][1 << 7];
} mat, qq;
const matr& operator*(const matr& x, const matr& y) {
  for (int i = 0; i < (1 << 7); i++)
    for (int j = 0; j < (1 << 7); j++) qq.a[i][j] = 0;
  for (int i = 0; i < (1 << 7); i++)
    for (int j = 0; j < (1 << 7); j++)
      for (int k = 0; k < (1 << 7); k++) qq.a[i][j] += x.a[i][k] * y.a[k][j];
  return qq;
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin >> n >> x;
  for (int i = 0; i <= x; i++) cin >> p[i];
  for (int mask1 = 0; mask1 < (1 << 7); mask1++)
    for (int mask2 = 0; mask2 < (1 << 7); mask2++)
      mat.a[mask1][mask2] = p[mask1 ^ mask2];
  mat = bpow(mat, n - 1);
  cout << fixed << setprecision(10) << 1 - mat.a[0][0];
  return 0;
}
