For problem statement at 0-999/200-299/260-269/267/problemC.txt this is a correct solution, but verifier at 0-999/200-299/260-269/267/verifierC.go ends with panic: runtime error: index out of range [5] with length 5
goroutine 1 [running]:
main.solve(0x5, {0x400007adb8, 0x1, 0xb?})
/home/ubuntu/codeforces/0-999/200-299/260-269/267/verifierC.go:113 +0xad8
main.buildCase(0x400007bec0)
/home/ubuntu/codeforces/0-999/200-299/260-269/267/verifierC.go:154 +0x200
main.main()
/home/ubuntu/codeforces/0-999/200-299/260-269/267/verifierC.go:192 +0x1d8
exit status 2 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"math"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var n, m int
if _, err := fmt.Fscan(in, &n, &m); err != nil {
return
}
type Edge struct {
u, v int
c float64
}
edges := make([]Edge, m)
mat := make([][]float64, n)
for i := range mat {
mat[i] = make([]float64, n+1)
}
for i := 0; i < m; i++ {
var u, v int
var c float64
fmt.Fscan(in, &u, &v, &c)
u--
v--
edges[i] = Edge{u, v, c}
if u != 0 && u != n-1 {
mat[u][u] += 1
mat[u][v] -= 1
}
if v != 0 && v != n-1 {
mat[v][v] += 1
mat[v][u] -= 1
}
}
mat[0][0] = 1
mat[0][n] = 1
mat[n-1][n-1] = 1
mat[n-1][n] = 0
r := 0
for c := 0; c < n; c++ {
pivot := r
for i := r; i < n; i++ {
if math.Abs(mat[i][c]) > math.Abs(mat[pivot][c]) {
pivot = i
}
}
if pivot < n && math.Abs(mat[pivot][c]) > 1e-9 {
mat[r], mat[pivot] = mat[pivot], mat[r]
val := mat[r][c]
for j := c; j <= n; j++ {
mat[r][j] /= val
}
for i := 0; i < n; i++ {
if i != r {
val := mat[i][c]
for j := c; j <= n; j++ {
mat[i][j] -= val * mat[r][j]
}
}
}
r++
}
}
p := make([]float64, n)
for i := 0; i < r; i++ {
for c := 0; c < n; c++ {
if math.Abs(mat[i][c]-1) < 1e-9 {
p[c] = mat[i][n]
break
}
}
}
S := math.Inf(1)
for i := 0; i < m; i++ {
f := p[edges[i].u] - p[edges[i].v]
if math.Abs(f) > 1e-9 {
val := edges[i].c / math.Abs(f)
if val < S {
S = val
}
}
}
if math.IsInf(S, 1) {
S = 0
}
total := 0.0
for i := 0; i < m; i++ {
if edges[i].u == 0 {
total += S * (p[edges[i].u] - p[edges[i].v])
} else if edges[i].v == 0 {
total -= S * (p[edges[i].u] - p[edges[i].v])
}
}
fmt.Printf("%.10f\n", total)
for i := 0; i < m; i++ {
fmt.Printf("%.10f\n", S*(p[edges[i].u]-p[edges[i].v]))
}
}
```