← Home
For problem statement at 1000-1999/1500-1599/1580-1589/1583/problemG.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1580-1589/1583/verifierG.go ends with Problem G is not implemented and cannot be automatically verified. can you fix the verifier? ```go
package main

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

type Task struct {
	id int
	a  int
	b  int
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	tasks := make([]Task, n)
	for i := 0; i < n; i++ {
		tasks[i].id = i + 1
		fmt.Fscan(reader, &tasks[i].a, &tasks[i].b)
	}

	var t int
	fmt.Fscan(reader, &t)
	s := make([]int, t)
	inS := make([]bool, n+1)
	for i := 0; i < t; i++ {
		fmt.Fscan(reader, &s[i])
		inS[s[i]] = true
	}

	sTasks := make([]Task, 0, t)
	for i := 0; i < n; i++ {
		if inS[tasks[i].id] {
			sTasks = append(sTasks, tasks[i])
		}
	}

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

	threshold := make([]int, n+1)
	inV := make([]bool, n+1)
	C_L := 0
	for _, task := range sTasks {
		if task.a > C_L {
			inV[task.id] = true
			threshold[task.id] = C_L
			C_L = task.a
		}
	}

	sort.Slice(tasks, func(i, j int) bool {
		return tasks[i].b < tasks[j].b
	})

	maxVal := 2 * n
	bit := make([]int, maxVal+1)
	add := func(idx, val int) {
		for ; idx <= maxVal; idx += idx & -idx {
			bit[idx] = (bit[idx] + val) % 1000000007
		}
	}
	query := func(idx int) int {
		sum := 0
		for ; idx > 0; idx -= idx & -idx {
			sum = (sum + bit[idx]) % 1000000007
		}
		return sum
	}

	MOD := 1000000007
	total_ans := 0

	for _, task := range tasks {
		if inV[task.id] {
			sum_gt_T := (query(maxVal) - query(threshold[task.id]) + MOD) % MOD
			total_ans = (total_ans + sum_gt_T + 1) % MOD
		}

		sum_gt_a := (query(maxVal) - query(task.a) + MOD) % MOD
		dp := (sum_gt_a + 1) % MOD
		add(task.a, dp)
	}

	fmt.Println(total_ans)
}
```