#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
#define MAXN 25
double p[MAXN],ans[MAXN];
int res[MAXN];
int N,R;
double pb,pa;
void add()
{
bool vis[MAXN];
double tmp=1.0;
memset(vis,false,sizeof(vis));
for (int i=1;i<=R;i++)
{
vis[res[i]]=true;
tmp*=p[res[i]];
}
for (int i=1;i<=N;i++)
if (!vis[i]) tmp*=(1-p[i]);
for (int i=1;i<=R;i++)
ans[res[i]]+=tmp;
pb+=tmp;
}
void dfs(int cur,int pre)
{
if (cur>R)
{
//for (int i=1;i<=R;i++) printf("%d ",res[i]);puts("");
add();
return ;
}
for (int i=pre+1;i<=N;i++)
{
if (R-cur>N-i) break;
res[cur]=i;
dfs(cur+1,i);
}
}
int main()
{
int kase=1;
while (scanf("%d%d",&N,&R)!=EOF)
{
if (N==0 && R==0) break;
for (int i=1;i<=N;i++)
scanf("%lf",&p[i]);
memset(ans,0,sizeof(ans));
pb=0;
dfs(1,0);
//printf("%lf\n",pb);
printf("Case %d:\n",kase++);
for (int i=1;i<=N;i++)
printf("%.6lf\n",ans[i]/pb);
}
return 0;
}