For problem statement at 1000-1999/1200-1299/1290-1299/1295/problemF.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1290-1299/1295/verifierF.go ends with All 100 tests passed can you fix the verifier? package main
import (
"fmt"
"sort"
)
const MOD = 998244353
func pow(base, exp int) int {
res := 1
base %= MOD
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % MOD
}
base = (base * base) % MOD
exp /= 2
}
return res
}
func inv(n int) int {
return pow(n, MOD-2)
}
func main() {
var n int
if _, err := fmt.Scan(&n); err != nil {
return
}
l := make([]int, n)
r := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&l[i], &r[i])
}
L_arr := make([]int, n)
R_arr := make([]int, n)
for i := 0; i < n; i++ {
L_arr[i] = l[n-1-i]
R_arr[i] = r[n-1-i]
}
var V []int
for i := 0; i < n; i++ {
V = append(V, l[i])
V = append(V, r[i]+1)
}
sort.Ints(V)
var U []int
for i := 0; i < len(V); i++ {
if i == 0 || V[i] != V[i-1] {
U = append(U, V[i])
}
}
S := make([]int, n+1)
S[0] = 1
for j := 0; j < len(U)-1; j++ {
L := U[j+1] - U[j]
c := make([]int, n+1)
c[0] = 1
for k := 1; k <= n; k++ {
c[k] = c[k-1] * ((L + k - 1) % MOD) % MOD * inv(k) % MOD
}
new_S := make([]int, n+1)
copy(new_S, S)
for i := 1; i <= n; i++ {
for k := 1; k <= i; k++ {
valid := true
for x := i - k + 1; x <= i; x++ {
if L_arr[x-1] > U[j] || R_arr[x-1] < U[j+1]-1 {
valid = false
break
}
}
if valid {
new_S[i] = (new_S[i] + c[k]*S[i-k]) % MOD
}
}
}
S = new_S
}
total := 1
for i := 0; i < n; i++ {
ways := (r[i] - l[i] + 1) % MOD
total = (total * ways) % MOD
}
ans := (S[n] * inv(total)) % MOD
fmt.Println(ans)
}