#include <bits/stdc++.h>   using namespace std;   long long bigmod(long long b, long long p) {     if (p == 0) return 1;     long long my = bigmod(b, p / 2);     my *= my;     my %= 1000000009;     if (p & 1) my *= b, my %= 1000000009;     return my;   }   int setb(int n, int pos) { return n = n | (1 << pos); }   int resb(int n, int pos) { return n = n & ~(1 << pos); }   bool checkb(int n, int pos) { return (bool)(n & (1 << pos)); }   double p[100];   int n, k;   double pr[(1 << 20) + 5][21];   double prob(int mask, int pos) {     double tot = 0.0;     int i;     for (i = 0; i < n; i++) {       if (checkb(mask, i) == 0) tot += p[i];     }     return p[pos] / tot;   }   void prework() {     for (int mask = 0; mask < (1 << n); mask++) {       for (int i = 0; i < n; i++) {         if (checkb(mask, i) == 0) {           pr[mask][i] = prob(mask, i);         }       }     }   }   double dp[(1 << 20) + 5];   double motherfuckerareyoukiddingme(int x) {     for (int mask = (1 << n) - 1; mask >= 0; mask--) {       int bt = __builtin_popcount(mask);       if (bt >= k) {         if (bt == k && checkb(mask, x))           dp[mask] = 1.0;         else           dp[mask] = 0.0;       } else {         double ret = 0.0;         for (int i = 0; i < n; i++) {           if (checkb(mask, i) == 0) {             ret += pr[mask][i] * dp[setb(mask, i)];           }         }         dp[mask] = ret;       }     }     return dp[0];   }   int main() {     int i, d = 0;     scanf( %d %d , &n, &k);     for (i = 0; i < n; i++) scanf( %lf , &p[i]);     for (i = 0; i < n; i++)       if (p[i] > 0.0) d++;     k = min(d, k);     prework();     for (i = 0; i < n; i++) {       if (i) printf(   );       printf( %.10f , motherfuckerareyoukiddingme(i));     }     printf(  n );     return 0;   }   