← Home
For problem statement at 0-999/900-999/930-939/932/problemE.txt this is a correct solution, but verifier at 0-999/900-999/930-939/932/verifierE.go ends with All 100 tests passed can you fix the verifier? package main

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

const mod int64 = 1000000007

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

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

	pow2N := powMod(2, N)
	if k == 0 {
		ans := (pow2N - 1) % mod
		if ans < 0 {
			ans += mod
		}
		fmt.Println(ans)
		return
	}

	s := make([]int64, k+1)
	s[0] = 1
	for n := 1; n <= k; n++ {
		for j := n; j >= 1; j-- {
			s[j] = (s[j-1] + int64(j)*s[j]) % mod
		}
		s[0] = 0
	}

	inv2 := (mod + 1) / 2
	fall := int64(1)
	pow2 := pow2N
	ans := int64(0)

	for j := 1; j <= k; j++ {
		factor := (N - int64(j) + 1) % mod
		if factor < 0 {
			factor += mod
		}
		fall = (fall * factor) % mod
		pow2 = (pow2 * inv2) % mod
		term := s[j]
		term = (term * fall) % mod
		term = (term * pow2) % mod
		ans += term
		if ans >= mod {
			ans -= mod
		}
		if fall == 0 {
			break
		}
	}

	fmt.Println(ans % mod)
}