← Home
package main

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

const MOD int64 = 1000000007

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, 1024*1024), 10*1024*1024)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	if !scanner.Scan() {
		return
	}
	k_int, _ := strconv.Atoi(scanner.Text())
	k := int64(k_int)

	a := make([]int, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		a[i], _ = strconv.Atoi(scanner.Text())
	}

	inv := make([]int64, n+1)
	if n >= 1 {
		inv[1] = 1
	}
	for i := 2; i <= n; i++ {
		inv[i] = MOD - (MOD/int64(i))*inv[MOD%int64(i)]%MOD
	}

	fact := make([]int64, n+1)
	invFact := make([]int64, n+1)
	fact[0] = 1
	invFact[0] = 1
	for i := 1; i <= n; i++ {
		fact[i] = fact[i-1] * int64(i) % MOD
		invFact[i] = invFact[i-1] * inv[i] % MOD
	}

	Delta := make([]int64, n)
	Delta[0] = 0
	for c := 1; c < n; c++ {
		term1 := int64(c) * (k - 1) % MOD * Delta[c-1] % MOD
		term2 := int64(c) * k % MOD
		val := (term1 - term2) % MOD
		if val < 0 {
			val += MOD
		}
		Delta[c] = val * inv[n-c] % MOD
	}

	F := make([]int64, n+1)
	F[0] = 0
	for c := 1; c <= n; c++ {
		F[c] = (F[c-1] + Delta[c-1]) % MOD
	}

	invK := power(k, MOD-2)
	C := (-F[n]) % MOD
	if C < 0 {
		C += MOD
	}
	C = C * invK % MOD

	for c := 0; c <= n; c++ {
		F[c] = (F[c] + C) % MOD
	}

	m := 0
	colorFreq := make(map[int]int)
	for _, val := range a {
		if val == -1 {
			m++
		} else {
			colorFreq[val]++
		}
	}

	D := int64(len(colorFreq))
	counts := make(map[int]int64)
	counts[0] = (k - D) % MOD
	for _, f := range colorFreq {
		counts[f]++
	}

	Prob := make([]int64, m+1)
	p := power(k, MOD-2)
	q := (k - 1) % MOD * p % MOD

	p_pow := make([]int64, m+1)
	q_pow := make([]int64, m+1)
	p_pow[0] = 1
	q_pow[0] = 1
	for j := 1; j <= m; j++ {
		p_pow[j] = p_pow[j-1] * p % MOD
		q_pow[j] = q_pow[j-1] * q % MOD
	}

	for j := 0; j <= m; j++ {
		comb := fact[m] * invFact[j] % MOD * invFact[m-j] % MOD
		Prob[j] = comb * p_pow[j] % MOD * q_pow[m-j] % MOD
	}

	var ans int64 = 0
	for c, freq_of_c := range counts {
		freq_of_c %= MOD
		var exp_F uint64 = 0
		for j := 0; j <= m; j++ {
			exp_F += uint64(Prob[j]) * uint64(F[c+j])
			if j&7 == 7 {
				exp_F %= uint64(MOD)
			}
		}
		exp_F %= uint64(MOD)
		term := uint64(freq_of_c) * exp_F % uint64(MOD)
		ans = (ans + int64(term)) % MOD
	}

	fmt.Println(ans)
}