← Home
For problem statement at 1000-1999/1200-1299/1280-1289/1284/problemC.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1280-1289/1284/verifierC.go ends with case 1 failed
input:
2 1000000007
expected: "6"
got: "4"

exit status 1 can you fix the verifier? ```go
package main

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

func modPow(a, e, mod int64) int64 {
	res := int64(1)
	for e > 0 {
		if e&1 == 1 {
			res = (res * a) % mod
		}
		a = (a * a) % mod
		e >>= 1
	}
	return res
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	var n int
	var m int64
	if _, err := fmt.Fscan(in, &n, &m); err != nil {
		return
	}

	if n <= 0 {
		fmt.Print(0)
		return
	}

	inv2 := (m + 1) / 2

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

	C := func(nn, kk int) int64 {
		if kk < 0 || kk > nn {
			return 0
		}
		return (((fact[nn] * invFact[kk]) % m) * invFact[nn-kk]) % m
	}

	S := int64(0)
	for k := 0; k <= n-1; k++ {
		ck := C(n-1, k)
		twoPow := modPow(2, int64(n-1-k), m)
		mult := (ck * twoPow) % m
		if k == n-1 {
			S = (S + mult) % m
		} else {
			S = (S + (mult*inv2)%m) % m
		}
	}

	ans := (fact[n] * S) % m
	fmt.Print(ans)
}
```