#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1000000000")
using namespace std;
const int maxn = 21;
int n, k;
double v[maxn];
double res[maxn];
bool used[1 << maxn];
double m[1 << maxn];
int get_bit(int x) {
  int res = 0;
  while (x > 0) {
    res += (x & 1);
    x >>= 1;
  }
  return res;
}
int main() {
  scanf("%d %d", &n, &k);
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    scanf("%lf", &v[i]);
    if (v[i] != 0) {
      cnt++;
    }
  }
  if (cnt <= k) {
    for (int i = 0; i < n; i++) {
      if (v[i] == 0) {
        cout << 0 << ' ';
      } else {
        cout << 1 << ' ';
      }
    }
    return 0;
  }
  queue<int> q;
  used[0] = true;
  m[0] = 1.0;
  q.push(0);
  while (!q.empty()) {
    int mask = q.front();
    q.pop();
    if (get_bit(mask) == k) {
      for (int i = 0; i < n; i++) {
        if ((1 & (mask >> i)) == 1) {
          res[i] += m[mask];
        }
      }
      continue;
    }
    double k = 0;
    for (int i = 0; i < n; i++) {
      int nmask = (mask | (1 << i));
      if (mask == nmask) {
        k += v[i];
      }
    }
    for (int i = 0; i < n; i++) {
      int nmask = mask | (1 << i);
      if (mask != nmask) {
        m[nmask] += (m[mask] * v[i] / (1 - k));
        if (!used[nmask]) {
          q.push(nmask);
          used[nmask] = true;
        }
      }
    }
  }
  double summ = 0.0;
  for (int i = 0; i < n; i++) {
    printf("%.10lf ", res[i]);
  }
  return 0;
}
