#include <bits/stdc++.h>
using namespace std;
int N, K, T, to[25];
long double prob[25], dp[2000100], val[25], ans[25];
bool v[2000100];
long double calc(int mask) {
  if (v[mask]) return dp[mask];
  v[mask] = 1;
  int i;
  long double tot = 0;
  for (i = 0; i < N; i++)
    if (mask & (1 << i)) tot += prob[i];
  for (i = 0; i < N; i++)
    if (mask & (1 << i)) {
      tot -= prob[i];
      dp[mask] = dp[mask] + (prob[i] * calc(mask - (1 << i))) / (1 - tot);
      tot += prob[i];
    }
  return dp[mask];
}
void get_masks(int mask, int cnt, int p) {
  if (p == N || cnt == K) {
    if (cnt != K) return;
    calc(mask);
    int i;
    for (i = 0; i < N; i++)
      if (mask & (1 << i)) val[i] += dp[mask];
    return;
  }
  get_masks(mask, cnt, p + 1);
  get_masks(mask + (1 << p), cnt + 1, p + 1);
}
int main() {
  cin >> N >> K;
  int i;
  for (i = 0; i < N; i++) {
    cin >> prob[i];
    if (prob[i] != 0) {
      T++;
      prob[T - 1] = prob[i];
      to[T - 1] = i;
    }
  }
  swap(T, N);
  if (K > N) K = N;
  dp[0] = 1, v[0] = 1;
  get_masks(0, 0, 0);
  for (i = 0; i < N; i++) ans[to[i]] = val[i];
  for (i = 0; i < T; i++) cout << fixed << setprecision(9) << ans[i] << " ";
  cout << "\n";
  return 0;
}
