#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  int n;
  int k;
  int countp = 0;
  cin >> n >> k;
  double p0[20];
  for (int i = 0; i < n; i++) {
    cin >> p0[i];
    if (p0[i] > 0) {
      countp++;
    }
  }
  cout << fixed << setprecision(9);
  if (n == k) {
    for (int i = 0; i < n; i++) {
      if (p0[i] > 0)
        cout << 1.0 << ' ';
      else
        cout << 0.0 << ' ';
    }
    cout << endl;
    return 0;
  }
  if (countp <= k) {
    for (int i = 0; i < n; i++) {
      if (p0[i] > 0) {
        cout << 1. << ' ';
      } else {
        cout << 0. << ' ';
      }
    }
    cout << endl;
    return 0;
  }
  double *p = new double[1048577];
  auto *v = new int[1048577];
  auto *q = new queue<int>();
  auto *qnew = new queue<int>();
  v[0] = 1;
  p[0] = 1;
  q->push(0);
  for (int i = 0; i < k; i++) {
    while (!q->empty()) {
      int cNum = q->front();
      q->pop();
      for (int num = 0; num < n; num++) {
        int realN = 1 << num;
        if (!(realN & cNum)) {
          int newNum = realN | cNum;
          double pnow = 1;
          for (int tnum = 0; tnum < n; tnum++) {
            int tN = 1 << tnum;
            if (tN & cNum) {
              pnow -= p0[tnum];
            }
          }
          if (v[newNum]) {
            p[newNum] += p[cNum] * p0[num] / pnow;
          } else {
            p[newNum] = p[cNum] * p0[num] / pnow;
            v[newNum] = 1;
            qnew->push(newNum);
          }
        }
      }
    }
    q = qnew;
    qnew = new queue<int>();
  }
  double ans[20];
  for (int i = 0; i < 20; i++) {
    ans[i] = 0;
  }
  while (!q->empty()) {
    int cNum = q->front();
    q->pop();
    for (int num = 0; num < n; num++) {
      int realN = 1 << num;
      if ((realN & cNum)) {
        ans[num] += p[cNum];
      }
    }
  }
  for (int i = 0; i < n; i++) {
    cout << ans[i] << ' ';
  }
  cout << endl;
  return 0;
}
