For problem statement at 1000-1999/1800-1899/1810-1819/1817/problemB.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1810-1819/1817/verifierB.go ends with case 1 failed: expected "YES\n7\n1 8\n8 3\n3 6\n6 5\n5 2\n2 7\n7 1" got "YES\n5\n7 1\n2 1\n7 2\n1 8\n1 3"
input:
1
8 18
2 7
5 6
1 7
2 5
2 6
1 8
6 7
3 6
1 2
4 7
4 8
3 8
6 8
7 8
4 5
3 4
2 3
1 3 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for i := 0; i < t; i++ {
var n, m int
fmt.Fscan(reader, &n, &m)
adj := make([][]int, n+1)
for j := 0; j < m; j++ {
var u, v int
fmt.Fscan(reader, &u, &v)
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
solve(n, m, adj, writer)
}
}
func solve(n, m int, adj [][]int, writer *bufio.Writer) {
for u := 1; u <= n; u++ {
if len(adj[u]) < 4 {
continue
}
visited := make([]bool, n+1)
root := make([]int, n+1)
parent := make([]int, n+1)
q := []int{}
for _, v := range adj[u] {
visited[v] = true
root[v] = v
parent[v] = v
q = append(q, v)
}
visited[u] = true
found := false
var cycleEdges [][2]int
var cycleNodes []bool
for len(q) > 0 {
c := q[0]
q = q[1:]
for _, nx := range adj[c] {
if nx == u {
continue
}
if visited[nx] {
if root[nx] != root[c] {
found = true
cycleEdges = make([][2]int, 0)
cycleNodes = make([]bool, n+1)
curr := c
for curr != root[curr] {
p := parent[curr]
cycleEdges = append(cycleEdges, [2]int{curr, p})
cycleNodes[curr] = true
cycleNodes[p] = true
curr = p
}
cycleEdges = append(cycleEdges, [2]int{root[c], u})
cycleNodes[root[c]] = true
cycleNodes[u] = true
curr = nx
for curr != root[curr] {
p := parent[curr]
cycleEdges = append(cycleEdges, [2]int{curr, p})
cycleNodes[curr] = true
cycleNodes[p] = true
curr = p
}
cycleEdges = append(cycleEdges, [2]int{root[nx], u})
cycleNodes[root[nx]] = true
cycleEdges = append(cycleEdges, [2]int{c, nx})
cycleNodes[c] = true
cycleNodes[nx] = true
break
}
} else {
visited[nx] = true
root[nx] = root[c]
parent[nx] = c
q = append(q, nx)
}
}
if found {
break
}
}
if found {
extra := 0
for _, v := range adj[u] {
if !cycleNodes[v] {
cycleEdges = append(cycleEdges, [2]int{u, v})
extra++
if extra == 2 {
break
}
}
}
fmt.Fprintln(writer, "YES")
fmt.Fprintln(writer, len(cycleEdges))
for _, edge := range cycleEdges {
fmt.Fprintln(writer, edge[0], edge[1])
}
return
}
}
fmt.Fprintln(writer, "NO")
}