← Home
For problem statement at 2000-2999/2000-2099/2020-2029/2025/problemF.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2020-2029/2025/verifierF.go ends with failed to parse reference output: expected 1732 operations, got 3
output:
y+
y+
y-

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"os"
)

type Edge struct {
	to int
	id int
}

func readInt(r *bufio.Reader) int {
	var n int
	var c byte
	for {
		c, _ = r.ReadByte()
		if c >= '0' && c <= '9' {
			break
		}
	}
	for {
		n = n*10 + int(c-'0')
		c, _ = r.ReadByte()
		if c < '0' || c > '9' {
			break
		}
	}
	return n
}

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 64*1024)
	writer := bufio.NewWriterSize(os.Stdout, 64*1024)
	defer writer.Flush()

	n := readInt(reader)
	q := readInt(reader)

	x := make([]int, q+1)
	y := make([]int, q+1)
	adj := make([][]Edge, n+1)

	for i := 1; i <= q; i++ {
		x[i] = readInt(reader)
		y[i] = readInt(reader)
		adj[x[i]] = append(adj[x[i]], Edge{y[i], i})
		adj[y[i]] = append(adj[y[i]], Edge{x[i], i})
	}

	visNode := make([]bool, n+1)
	visEdge := make([]bool, q+1)
	indeg := make([]int, n+1)
	assign := make([]int, q+1)

	var dfs func(u, p, edgeFromParent int)
	dfs = func(u, p, edgeFromParent int) {
		visNode[u] = true
		for _, edge := range adj[u] {
			if edge.id == edgeFromParent {
				continue
			}
			if visEdge[edge.id] {
				continue
			}
			visEdge[edge.id] = true
			v := edge.to
			if visNode[v] {
				assign[edge.id] = v
				indeg[v]++
			} else {
				dfs(v, u, edge.id)
			}
		}
		if p != 0 {
			if indeg[u]%2 != 0 {
				assign[edgeFromParent] = u
				indeg[u]++
			} else {
				assign[edgeFromParent] = p
				indeg[p]++
			}
		}
	}

	for i := 1; i <= n; i++ {
		if !visNode[i] {
			dfs(i, 0, 0)
		}
	}

	ansChar1 := make([]byte, q+1)
	ansChar2 := make([]byte, q+1)
	assignedEdges := make([][]int, n+1)

	for i := 1; i <= q; i++ {
		v := assign[i]
		assignedEdges[v] = append(assignedEdges[v], i)
	}

	for v := 1; v <= n; v++ {
		for i, edgeIdx := range assignedEdges[v] {
			if i%2 == 0 {
				ansChar2[edgeIdx] = '+'
			} else {
				ansChar2[edgeIdx] = '-'
			}

			if x[edgeIdx] == v {
				ansChar1[edgeIdx] = 'x'
			} else {
				ansChar1[edgeIdx] = 'y'
			}
		}
	}

	for i := 1; i <= q; i++ {
		writer.WriteByte(ansChar1[i])
		writer.WriteByte(ansChar2[i])
		writer.WriteByte('\n')
	}
}