#include<iostream>
#include<fstream>
using namespace std;
int N,K;
float numere[25];
int poz;
//stack<float> result;
float data[25];
float probab;
float prob1=1;
/*
int combinari(int n,int k)
{
if (k==0) return 1;
else if (k>n) return 0;
else return (combinari(n-1,k)+combinari(n-1,k-1));
}
*/
/*
void combinationUtil(float numere[], float data[], int start, int end, int index, int k)
{
if (index == k) {
float prob=1;
//cout << poz << ": ";
for (int j=0; j<k; j++) {
prob = prob*data[j];
//cout << data[j] << " ";
}
poz++;
probab=probab+prob;
return;
}
for (int i=start; i<=end && end-i+1 >= k-index; i++)
{
data[index] = numere[i];
combinationUtil(numere, data, i+1, end, index+1, k);
}
}*/
/*
void combinationUtil(int start, int end, int index, int k)
{
if (index == k) {
//float prob=1;
//cout << poz << ": ";
//for (int j=0; j<k; j++) {
// prob = prob*data[j];
// cout << data[j] << " ";
//}
//cout << '\n';
poz++;
probab=probab+prob1;
//prob1=1;
return;
}
for (int i=start; i<=end && end-i+1 >= k-index; i++)
{
if(index==0) prob1=1;
prob1 = prob1*numere[i];
data[index] = numere[i];
combinationUtil(i+1, end, index+1, k);
}
}*/
void combinationUtil(float prob, int N, int k) {
if (k == 0) {
probab += prob;
++poz;
return;
}
if (N == k) {
for(int i = N-1; i >= 0; --i)
prob *= numere[i];
probab += prob;
++poz;
return;
}
combinationUtil(prob, N-1, k);
combinationUtil(prob*numere[N-1], N-1, k-1);
}
int main(){
ifstream f("dezastru.in");
ofstream out("dezastru.out");
f>>N>>K;
for (int i=0; i<N;i++) {
f>>numere[i];
}
//combinationUtil(a, data, 0, N-1, 0, K);
combinationUtil(1, N, K);
out << (probab)/(float)(poz);
return 0;
}