#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:3200000")
using namespace std;
const int maxn = 20;
int cnt[(1 << maxn)];
double v[maxn];
double ans[maxn];
double t[(1 << maxn)];
bool used[(1 << maxn)];
int getcnt(int x) {
  int ans = 0;
  while (x != 0) {
    ans += x & 1;
    x >>= 1;
  }
  return ans;
}
int main() {
  for (int i = 0; i < (1 << maxn); i++) {
    cnt[i] = getcnt(i);
  }
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> v[i];
  }
  queue<int> q;
  t[0] = 1.0;
  q.push(0);
  while (!q.empty()) {
    int m = q.front();
    double x = t[m];
    q.pop();
    bool st = false;
    for (int i = 0; i < n; i++) {
      if (((m >> i) & 1) == 0 && v[i] != 0) {
        st = true;
        break;
      }
    }
    if (cnt[m] == k || !st) {
      for (int i = 0; i < n; i++) {
        if ((m & 1) == 1) {
          ans[i] += x;
        }
        m >>= 1;
      }
      continue;
    }
    double y = 0.0;
    for (int i = 0; i < n; i++) {
      if (((m >> i) & 1) == 1) {
        y += v[i];
      }
    }
    for (int i = 0; i < n; i++) {
      if (((m >> i) & 1) == 0 && v[i] != 0) {
        int nm = m | (1 << i);
        t[nm] += x * v[i] / (1 - y);
        if (!used[nm]) {
          used[nm] = true;
          q.push(nm);
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    printf("%.10lf ", ans[i]);
  }
  return 0;
}
