#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 500;
const int M = 1e6 + 500;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int LOG = 20;
const int ALP = 30;
const int BASE = 31337;
const double EPS = 1e-9;
const double PI = 3.1415926535;
const int MSK = (1 << 20);
int n, K, kol0;
long double P[N], sol[N];
long double dp[MSK], kof[MSK];
long double fastpot(long double x, int k) {
  long double ret = (long double)1.0, bs = x;
  for (; k; k >>= 1) {
    if (k & 1) ret *= bs;
    bs *= bs;
  }
  return ret;
}
int main() {
  scanf("%d%d", &n, &K);
  for (int i = 0; i < n; i++) scanf("%Lf", P + i), kol0 += (P[i] < 0.005);
  K = min(K, n - kol0);
  for (int i = 0; i < (1 << n); i++) {
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) kof[i] += P[j];
    }
  }
  for (int i = 0; i < (1 << n); i++) {
    if (kof[i] < (long double)0.995) dp[i] = fastpot(kof[i], K) / (1 - kof[i]);
  }
  for (int j = 0; j < n; j++) {
    for (int i = 0; i < (1 << n); i++) {
      if (i & (1 << j)) dp[i] -= dp[i ^ (1 << j)];
    }
  }
  for (int i = 0; i < (1 << n); i++) {
    if (__builtin_popcount(i) != K) continue;
    dp[i] -= dp[i] * kof[i];
    if (kof[i] > (long double)0.995) dp[i] = (long double)1.0;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) sol[j] += dp[i];
    }
  }
  long double sm = 0;
  for (int i = 0; i < n; i++) printf("%.10Lf ", sol[i]), sm += sol[i];
  printf("\n");
  assert(sm > (long double)K - (long double)1e9);
  return 0;
}
