← Home
For problem statement at 1000-1999/1300-1399/1360-1369/1361/problemB.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1360-1369/1361/verifierB.go ends with case 1 failed
expected:
4

got:
0

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

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

const MOD int64 = 1000000007

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024*1024), 1024*1024)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	scanner.Scan()
	t, _ := strconv.Atoi(scanner.Text())

	for tc := 0; tc < t; tc++ {
		scanner.Scan()
		n, _ := strconv.Atoi(scanner.Text())
		scanner.Scan()
		p, _ := strconv.Atoi(scanner.Text())

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

		if p == 1 {
			fmt.Fprintln(writer, n%2)
			continue
		}

		sort.Slice(k, func(i, j int) bool {
			return k[i] > k[j]
		})

		var cnt int64 = 0
		last := 0
		broken := false
		var result int64 = 0

		for i := 0; i < n; i++ {
			exp := k[i]
			if cnt == 0 {
				cnt = 1
				last = exp
			} else {
				diff := last - exp
				temp := cnt
				for j := 0; j < diff && temp <= int64(n); j++ {
					temp *= int64(p)
				}

				if temp > int64(n) {
					res := (modPow(int64(p), int64(last), MOD) * (cnt % MOD)) % MOD
					for j := i; j < n; j++ {
						val := modPow(int64(p), int64(k[j]), MOD)
						res = (res - val + MOD) % MOD
					}
					result = res
					broken = true
					break
				}

				cnt = temp - 1
				if cnt > 0 {
					last = exp
				}
			}
		}

		if !broken {
			if cnt == 0 {
				result = 0
			} else {
				result = (modPow(int64(p), int64(last), MOD) * (cnt % MOD)) % MOD
			}
		}

		fmt.Fprintln(writer, result)
	}
}
```