← Home
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)
		}
	}
}
```