← Home
For problem statement at 1000-1999/1400-1499/1410-1419/1418/problemE.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1410-1419/1418/verifierE.go ends with All tests passed can you fix the verifier? ```go
package main

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

const MOD int64 = 998244353

func nextInt(r *bufio.Reader) int64 {
	var sign int64 = 1
	var val int64 = 0
	c, _ := r.ReadByte()
	for (c < '0' || c > '9') && c != '-' {
		c, _ = r.ReadByte()
	}
	if c == '-' {
		sign = -1
		c, _ = r.ReadByte()
	}
	for c >= '0' && c <= '9' {
		val = val*10 + int64(c-'0')
		c, _ = r.ReadByte()
	}
	return val * sign
}

func lowerBound(a []int64, x int64) int {
	l, r := 0, len(a)
	for l < r {
		m := (l + r) >> 1
		if a[m] >= x {
			r = m
		} else {
			l = m + 1
		}
	}
	return l
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	n := int(nextInt(in))
	m := int(nextInt(in))
	d := make([]int64, n)
	for i := 0; i < n; i++ {
		d[i] = nextInt(in)
	}
	sort.Slice(d, func(i, j int) bool { return d[i] < d[j] })

	pre := make([]int64, n+1)
	for i := 0; i < n; i++ {
		pre[i+1] = pre[i] + d[i]
	}
	total := pre[n]

	// Precompute modular inverses for 1..n+1
	inv := make([]int64, n+2)
	inv[1] = 1
	for i := 2; i <= n+1; i++ {
		inv[i] = MOD - (MOD/int64(i))*(inv[int(MOD%int64(i))]%MOD)%MOD
	}

	for i := 0; i < m; i++ {
		a := int(nextInt(in))
		b := nextInt(in)

		idx := lowerBound(d, b)
		S := n - idx
		if a > S || S == 0 {
			fmt.Fprintln(out, 0)
			continue
		}

		sumWeak := pre[idx]
		sumStrong := total - sumWeak

		sMod := sumStrong % MOD
		wMod := sumWeak % MOD

		term1 := sMod * (int64(S-a)%MOD) % MOD * inv[S] % MOD
		term2 := wMod * (int64(S+1-a)%MOD) % MOD * inv[S+1] % MOD

		res := (term1 + term2) % MOD
		fmt.Fprintln(out, res)
	}
}
```