#include //登録しよう!→ https://www.youtube.com/channel/UCRXsI3FL_kvaVL9zoolBfbQ using namespace std; using ll = long long; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}//a,bの最大公約数(gcd)を求める ll lcm(ll a,ll b){return abs(a*b)/gcd(a,b);}//a,bの最小公倍数(lcm)を求める vector enum_div(ll n){vector ret;for(int i=1 ; i*i<=n ; i++){if(n%i == 0){ret.push_back(i);if(i!=1 && i*i!=n)ret.push_back(n/i);}}ret.push_back(n);return ret;} //↑nの約数を求める vector IsPrime; void sieve(size_t max){if(max+1 > IsPrime.size())IsPrime.resize(max+1,true);IsPrime[0] = false;IsPrime[1] = false;for(size_t i=2; i*i<=max; ++i)if(IsPrime[i])for(size_t j=2; i*j<=max; ++j)IsPrime[i*j] = false;} //↑エラトステネスの篩で素数を求める #define roundup(divisor,dividend) (divisor + (dividend - 1)) / dividend //切り上げ割り算 #define all(x) (x).begin(),(x).end() //xの初めから終わりまでのポインタ #define size_t ll //size_tは自動でllに変換される #define pb(x) push_back(x) #define gre greater //sortを降順にする #define pri_queue priority_queue //優先度付きキュー #define syo(x) fixed << setprecision(x) //iostreamで小数をx桁表示 const int mod = 1000000007; int n,b; double ansa=0,ansb=0; double a; int main(){ //srand((unsigned)time(NULL)); cin >> n >> b; for (int i = 0; i < n; i++) { cin >> a; ansa += a*(double)pow(b,a-1); ansb += (a != -1 ? (1/(a+1))*(double)pow(b,(a+1)) : log(b)); } cout << syo(6) << ansa << endl << ansb << endl; }