#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 22);
struct node {
  int state;
  int val;
  double state_p;
} num[MAXN];
double p[25], P[25], dp[MAXN], ans[MAXN];
int n1, k, n;
int low_bit(int x) { return x & -x; }
int cnt_bit(int x) {
  int ans = 0;
  while (x) {
    ++ans;
    x -= low_bit(x);
  }
  return ans;
}
bool cmp(node x, node y) { return x.val < y.val; }
int main() {
  scanf("%d %d", &n1, &k);
  for (int i = 1; i <= n1; ++i) {
    scanf("%lf", &P[i]);
    if (P[i] != 0.0) {
      p[++n] = P[i];
    }
  }
  k = min(k, n);
  int max_state = 1 << n;
  for (int i = 0; i < max_state; ++i) {
    num[i].state = i;
    num[i].val = cnt_bit(i);
    num[i].state_p = 0;
    for (int j = 0; j < n; ++j) {
      if ((1 << j) & i) {
        num[i].state_p += p[j + 1];
      }
    }
  }
  sort(num, num + max_state, cmp);
  dp[0] = 1;
  for (int i = 0; i < max_state; ++i) {
    for (int j = 0; j < n; ++j) {
      if (((1 << j) & num[i].state) == 0) {
        dp[(1 << j) | num[i].state] +=
            dp[num[i].state] * p[j + 1] / (1 - num[i].state_p);
      }
    }
    if (num[i].val == k) {
      for (int j = 0; j < n; ++j) {
        if ((1 << j) & num[i].state) {
          ans[j + 1] += dp[num[i].state];
        }
      }
    }
  }
  n = 0;
  for (int i = 1; i <= n1; ++i) {
    if (P[i] != 0.0) {
      printf("%.10lf ", ans[++n]);
    } else {
      printf("%.10lf ", 0.0);
    }
  }
  return 0;
}
