← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func power(base, exp int64) int64 {
	var res int64 = 1
	base %= 1000000007
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % 1000000007
		}
		base = (base * base) % 1000000007
		exp /= 2
	}
	return res
}

func modInverse(n int64) int64 {
	return power(n, 1000000007-2)
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n, k int
	if _, err := fmt.Fscan(in, &n, &k); err != nil {
		return
	}

	a := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &a[i])
	}

	e := make([]int64, n+1)
	e[0] = 1
	for i := 0; i < n; i++ {
		val := a[i] % 1000000007
		for j := n; j >= 1; j-- {
			e[j] = (e[j] + e[j-1]*val) % 1000000007
		}
	}

	var ans int64 = 0
	var k_fall int64 = 1
	n_inv := modInverse(int64(n))
	var n_inv_pow int64 = 1

	limit := n
	if k < n {
		limit = k
	}

	for m := 1; m <= limit; m++ {
		k_fall = (k_fall * int64(k-m+1)) % 1000000007
		n_inv_pow = (n_inv_pow * n_inv) % 1000000007

		term := (k_fall * n_inv_pow) % 1000000007
		term = (term * e[n-m]) % 1000000007

		if m%2 == 1 {
			ans = (ans + term) % 1000000007
		} else {
			ans = (ans - term + 1000000007) % 1000000007
		}
	}

	fmt.Println(ans)
}
```