#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& _p) {
  return os << "(" << _p.first << "," << _p.second << ")";
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& _V) {
  bool f = true;
  os << "[";
  for (auto v : _V) {
    os << (f ? "" : ",") << v;
    f = false;
  }
  return os << "]";
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& _S) {
  bool f = true;
  os << "(";
  for (auto s : _S) {
    os << (f ? "" : ",") << s;
    f = false;
  }
  return os << ")";
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const map<T, U>& _M) {
  return os << set<pair<T, U>>(_M.begin(), _M.end());
}
const signed long long INF = 1000000100;
const long double EPS = 1e-9;
const int MAXN = 21;
double dp[1 << MAXN], p[MAXN], ans[MAXN];
int n, k, zeros;
void read_data() {
  cin >> n >> k;
  for (int(i) = (0); (i) < (n); (i)++) {
    cin >> p[i];
    if (p[i] == 0.0) zeros++;
  }
  k = min(k, n - zeros);
}
void solve() {
  dp[0] = 1.0;
  for (int(s) = (0); (s) <= (k); (s)++) {
    for (int(mask) = (0); (mask) < ((1 << n)); (mask)++) {
      if (__builtin_popcount(mask) != s) continue;
      double pout = 0;
      for (int(i) = (0); (i) < (n); (i)++) {
        if (!(mask & (1 << i)))
          pout += p[i];
        else if (s == k)
          ans[i] += dp[mask];
      }
      for (int(i) = (0); (i) < (n); (i)++) {
        if (!(mask & (1 << i))) {
          dp[mask | (1 << i)] += dp[mask] * p[i] / pout;
        }
      }
    }
  }
  cout << setprecision(12) << fixed;
  for (int(i) = (0); (i) < (n); (i)++) cout << ans[i] << " ";
}
int main() {
  ios_base::sync_with_stdio(0);
  read_data();
  solve();
}
