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

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

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

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

	nextInt := func() int {
		if !scanner.Scan() {
			return 0
		}
		var res int
		b := scanner.Bytes()
		for _, ch := range b {
			res = res*10 + int(ch-'0')
		}
		return res
	}

	k := nextInt()
	if k == 0 {
		return
	}
	n := nextInt()
	m := nextInt()

	maxL_O := make(map[int]int)
	P_set := make(map[int]bool)
	P_set[0] = true
	P_set[k] = true

	for i := 0; i < n; i++ {
		l := nextInt()
		r := nextInt()
		if l > maxL_O[r] {
			maxL_O[r] = l
		}
		if l-1 >= 0 {
			P_set[l-1] = true
		}
		if r-1 >= 0 && r-1 <= k {
			P_set[r-1] = true
		}
		if r >= 0 && r <= k {
			P_set[r] = true
		}
	}

	maxL_R := make(map[int]int)
	for i := 0; i < m; i++ {
		l := nextInt()
		r := nextInt()
		if l > maxL_R[r] {
			maxL_R[r] = l
		}
		if l-1 >= 0 {
			P_set[l-1] = true
		}
		if r-1 >= 0 && r-1 <= k {
			P_set[r-1] = true
		}
		if r >= 0 && r <= k {
			P_set[r] = true
		}
	}

	P := make([]int, 0, len(P_set))
	for p := range P_set {
		if p <= k {
			P = append(P, p)
		}
	}
	sort.Ints(P)

	idx := make(map[int]int)
	for i, p := range P {
		idx[p] = i
	}

	reqO := make([]int, len(P))
	reqR := make([]int, len(P))
	curO := 0
	curR := 0
	for i, p := range P {
		if val, ok := maxL_O[p]; ok {
			if val > curO {
				curO = val
			}
		}
		reqO[i] = curO

		if val, ok := maxL_R[p]; ok {
			if val > curR {
				curR = val
			}
		}
		reqR[i] = curR
	}

	MOD := int64(1000000007)
	S_O := make([]int64, len(P))
	S_R := make([]int64, len(P))

	S_O[0] = 1
	S_R[0] = 1

	var ans int64 = 0

	for i := 0; i < len(P)-1; i++ {
		r_O := reqO[i+1]
		r_R := reqR[i+1]

		var C_R int64 = 0
		if r_O > 0 {
			C_R = S_O[idx[r_O-1]]
		}

		var C_O int64 = 0
		if r_R > 0 {
			C_O = S_R[idx[r_R-1]]
		}

		val_O := (S_R[i] - C_O) % MOD
		if val_O < 0 {
			val_O += MOD
		}

		val_R := (S_O[i] - C_R) % MOD
		if val_R < 0 {
			val_R += MOD
		}

		Lint := P[i+1] - P[i]
		W := (val_O + val_R) % MOD

		ans = (W * power(2, Lint-1)) % MOD

		if Lint == 1 {
			S_O[i+1] = (S_O[i] + val_O) % MOD
			S_R[i+1] = (S_R[i] + val_R) % MOD
		} else {
			p_val := (power(2, Lint-1) - 1 + MOD) % MOD
			delta := (W * p_val) % MOD
			S_O[i+1] = (S_O[i] + val_O + delta) % MOD
			S_R[i+1] = (S_R[i] + val_R + delta) % MOD
		}
	}

	fmt.Println(ans)
}
```