← Home
For problem statement at 0-999/500-599/550-559/557/problemD.txt this is a correct solution, but verifier at 0-999/500-599/550-559/557/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)
	var n, m int
	fmt.Fscan(in, &n, &m)
	adj := make([][]int, n+1)
	for i := 0; i < m; i++ {
		var a, b int
		fmt.Fscan(in, &a, &b)
		adj[a] = append(adj[a], b)
		adj[b] = append(adj[b], a)
	}
	visited := make([]bool, n+1)
	color := make([]int, n+1)
	for i := 0; i <= n; i++ {
		color[i] = -1
	}
	hasOdd := false
	var ways int64 = 0
	for i := 1; i <= n; i++ {
		if visited[i] {
			continue
		}
		var cnt0, cnt1 int64 = 0, 0
		compOdd := false
		q := make([]int, 0)
		visited[i] = true
		color[i] = 0
		cnt0++
		q = append(q, i)
		for j := 0; j < len(q); j++ {
			u := q[j]
			for _, v := range adj[u] {
				if color[v] == -1 {
					color[v] = 1 - color[u]
					if color[v] == 0 {
						cnt0++
					} else {
						cnt1++
					}
					visited[v] = true
					q = append(q, v)
				} else if color[v] == color[u] {
					compOdd = true
				}
			}
		}
		if compOdd {
			hasOdd = true
		} else {
			ways += cnt0 * (cnt0 - 1) / 2
			ways += cnt1 * (cnt1 - 1) / 2
		}
	}
	if hasOdd {
		fmt.Println(0, 1)
	} else if ways > 0 {
		fmt.Println(1, ways)
	} else {
		var nn int64 = int64(n)
		var mm int64 = int64(m)
		var ww int64
		if mm == 0 {
			ww = nn * (nn - 1) * (nn - 2) / 6
			fmt.Println(3, ww)
		} else {
			ww = mm * (nn - 2)
			fmt.Println(2, ww)
		}
	}
}
```