#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;   }   