#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline T1 max(T1 a, T2 b) {
  return a < b ? b : a;
}
template <typename T1, typename T2>
inline T1 min(T1 a, T2 b) {
  return a < b ? a : b;
}
const char lf = '\n';
namespace ae86 {
const int bufl = 1 << 15;
char buf[bufl], *s = buf, *t = buf;
inline int fetch() {
  if (s == t) {
    t = (s = buf) + fread(buf, 1, bufl, stdin);
    if (s == t) return EOF;
  }
  return *s++;
}
inline int ty() {
  int a = 0;
  int b = 1, c = fetch();
  while (!isdigit(c)) b ^= c == '-', c = fetch();
  while (isdigit(c)) a = a * 10 + c - 48, c = fetch();
  return b ? a : -a;
}
inline double td() {
  double a = 0, d = 0.1;
  int b = 1, c = fetch();
  while (!isdigit(c)) b ^= c == '-', c = fetch();
  while (isdigit(c)) a = a * 10 + c - 48, c = fetch();
  if (c != '.') return b ? a : -a;
  while (c = fetch(), isdigit(c)) a += d * (c - 48), d *= 0.1;
  return b ? a : -a;
}
}  // namespace ae86
using ae86::td;
using ae86::ty;
const int _ = 23, __ = 1 << 20;
int n, nn, lim, bcnt[__] = {0};
double ps[_], sps[__] = {0}, f[__] = {0}, ans[_] = {0};
int main() {
  ios::sync_with_stdio(0), cout.tie(nullptr);
  n = ty(), nn = 1 << n, lim = ty();
  int cnts = 0;
  for (int i = 0; i < n; i++) ps[i] = td(), cnts += ps[i] > 0;
  if (cnts < lim) {
    for (int i = 0; i < n; i++) cout << "01"[ps[i] > 0] << " \n"[i == n - 1];
    return 0;
  }
  for (int i = 0; i < nn; i++)
    for (int j = 0; j < n; j++)
      if ((((i) >> (j)) & 1)) sps[i] += ps[j];
  bcnt[0] = 0;
  for (int i = 1; i < nn; i++) bcnt[i] = bcnt[i >> 1] + (i & 1);
  f[0] = 1;
  for (int i = 0; i < nn; i++) {
    if (bcnt[i] == lim)
      for (int j = 0; j < n; j++)
        if ((((i) >> (j)) & 1)) ans[j] += f[i];
    if (bcnt[i] >= lim) continue;
    for (int j = 0; j < n; j++)
      if (!(((i) >> (j)) & 1)) f[i | (1 << (j))] += f[i] * ps[j] / (1 - sps[i]);
  }
  for (int i = 0; i < n; i++)
    cout << setprecision(11) << fixed << ans[i] << " \n"[i == n - 1];
  return 0;
}
