For problem statement at 1000-1999/1700-1799/1770-1779/1776/problemF.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1770-1779/1776/verifierF.go ends with panic: invalid argument to Intn
goroutine 1 [running]:
math/rand.(*Rand).Intn(0x40000a0b58?, 0x285b0?)
/usr/local/go/src/math/rand/rand.go:180 +0x64
main.genCase(0x40000a0e70)
/home/ubuntu/codeforces/1000-1999/1700-1799/1770-1779/1776/verifierF.go:26 +0x48
main.main()
/home/ubuntu/codeforces/1000-1999/1700-1799/1770-1779/1776/verifierF.go:62 +0x280
exit status 2 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
fmt.Fscan(reader, &t)
for tc := 0; tc < t; tc++ {
var n, m int
fmt.Fscan(reader, &n, &m)
edges := make([][2]int, m)
for i := 0; i < m; i++ {
fmt.Fscan(reader, &edges[i][0], &edges[i][1])
}
if m == n-1 {
fmt.Fprintln(writer, 2)
for i := 0; i < m; i++ {
if i == 0 {
fmt.Fprint(writer, 1)
} else {
fmt.Fprint(writer, 2)
}
if i < m-1 {
fmt.Fprint(writer, " ")
}
}
fmt.Fprintln(writer)
continue
}
adj := make([][]int, n)
for i := 0; i < m; i++ {
u, v := edges[i][0]-1, edges[i][1]-1
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
parent := make([]int, n)
visited := make([]bool, n)
queue := []int{0}
visited[0] = true
parent[0] = -1
treeEdges := make(map[int]bool)
edgeIdx := make(map[[2]int]int)
for i := 0; i < m; i++ {
u, v := edges[i][0]-1, edges[i][1]-1
if u > v {
u, v = v, u
}
edgeIdx[[2]int{u, v}] = i
}
for len(queue) > 0 {
u := queue[0]
queue = queue[1:]
for _, v := range adj[u] {
if !visited[v] {
visited[v] = true
parent[v] = u
queue = append(queue, v)
a, b := u, v
if a > b {
a, b = b, a
}
treeEdges[edgeIdx[[2]int{a, b}]] = true
}
}
}
leaf := -1
for i := 0; i < n; i++ {
if len(adj[i]) == 1 {
leaf = i
break
}
}
if leaf == -1 {
leaf = 0
}
leafEdge := -1
for i := 0; i < m; i++ {
u, v := edges[i][0]-1, edges[i][1]-1
if (u == leaf && parent[v] == u) || (v == leaf && parent[u] == v) {
leafEdge = i
break
}
}
ans := make([]int, m)
nonTreeCount := 0
for i := 0; i < m; i++ {
if treeEdges[i] {
if i == leafEdge {
ans[i] = 1
} else {
ans[i] = 2
}
} else {
ans[i] = 3
nonTreeCount++
}
}
if nonTreeCount == 0 {
fmt.Fprintln(writer, 2)
for i := 0; i < m; i++ {
if i > 0 {
fmt.Fprint(writer, " ")
}
if i%2 == 0 {
fmt.Fprint(writer, 1)
} else {
fmt.Fprint(writer, 2)
}
}
fmt.Fprintln(writer)
} else {
fmt.Fprintln(writer, 3)
for i := 0; i < m; i++ {
if i > 0 {
fmt.Fprint(writer, " ")
}
fmt.Fprint(writer, ans[i])
}
fmt.Fprintln(writer)
}
}
}
```