← Home
package main

import (
	"fmt"
	"io"
	"os"
)

const MOD int64 = 1000000007

func powMod(a, e int64) int64 {
	r := int64(1)
	for e > 0 {
		if e&1 == 1 {
			r = r * a % MOD
		}
		a = a * a % MOD
		e >>= 1
	}
	return r
}

func calcJ(m int, kmod, km1 int64, inv, h []int64) []int64 {
	j := make([]int64, m+1)
	if m == 0 {
		return j
	}
	j[0] = (MOD - h[m]) % MOD
	cur := inv[m]
	for c := 1; c <= m; c++ {
		j[c] = (j[c-1] + kmod*cur) % MOD
		if c < m {
			cur = ((((km1 * int64(c)) % MOD) * cur) % MOD + 1) % MOD
			cur = cur * inv[m-c] % MOD
		}
	}
	return j
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] == ' ' || data[idx] == '\n' || data[idx] == '\r' || data[idx] == '\t') {
			idx++
		}
		sign := 1
		if data[idx] == '-' {
			sign = -1
			idx++
		}
		num := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			num = num*10 + int(data[idx]-'0')
			idx++
		}
		return sign * num
	}

	n := nextInt()
	k := nextInt()

	cntVal := make(map[int]int)
	known := 0
	for i := 0; i < n; i++ {
		x := nextInt()
		if x != -1 {
			cntVal[x]++
			known++
		}
	}

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

	kmod := int64(k)
	km1 := kmod - 1
	invk := powMod(kmod, MOD-2)

	jAll := calcJ(n, kmod, km1, inv, h)
	iAll := (jAll[n] + km1*jAll[0]) % MOD
	iAll = iAll * invk % MOD

	jKnown := calcJ(known, kmod, km1, inv, h)
	freqCnt := make([]int, known+1)
	for _, c := range cntVal {
		freqCnt[c]++
	}
	d := len(cntVal)

	sumJ := int64(0)
	for c, num := range freqCnt {
		if num != 0 {
			sumJ = (sumJ + int64(num)*jKnown[c]) % MOD
		}
	}
	coef0 := (kmod - int64(d)%MOD + MOD) % MOD
	iKnown := (coef0*jKnown[0] + sumJ) % MOD
	iKnown = iKnown * invk % MOD

	ans := int64(n) % MOD
	ans = ans * ((iAll - iKnown + MOD) % MOD) % MOD

	fmt.Print(ans)
}