← Home
For problem statement at 0-999/600-699/600-609/605/problemB.txt this is a correct solution, but verifier at 0-999/600-699/600-609/605/verifierB.go ends with All tests passed can you fix the verifier? ```go
package main

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

type Edge struct {
	w  int
	id int
}

type ResultEdge struct {
	u, v int
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, m int
	if _, err := fmt.Fscan(reader, &n, &m); err != nil {
		return
	}

	treeEdges := make([]Edge, 0, n-1)
	nonTreeEdges := make([]Edge, 0, m-n+1)

	for i := 0; i < m; i++ {
		var w, inTree int
		fmt.Fscan(reader, &w, &inTree)
		if inTree == 1 {
			treeEdges = append(treeEdges, Edge{w, i})
		} else {
			nonTreeEdges = append(nonTreeEdges, Edge{w, i})
		}
	}

	if len(treeEdges) != n-1 {
		fmt.Fprint(writer, "-1")
		return
	}

	sort.Slice(treeEdges, func(i, j int) bool {
		return treeEdges[i].w < treeEdges[j].w
	})

	sort.Slice(nonTreeEdges, func(i, j int) bool {
		return nonTreeEdges[i].w < nonTreeEdges[j].w
	})

	results := make([]ResultEdge, m)

	// Construct the MST as a path 1-2-...-n
	// The i-th edge in sorted treeEdges connects vertex (i+1) and (i+2)
	for i, e := range treeEdges {
		results[e.id] = ResultEdge{i + 1, i + 2}
	}

	// Assign non-tree edges
	// We generate available slots (u, v) based on the tree structure.
	// For the path graph 1-2-...-n, where edges are sorted by weight,
	// the path between u and v (u < v) has max weight equal to the weight of edge (v-1, v).
	// In our 0-indexed treeEdges array, edge connecting v-1 and v is treeEdges[v-2].
	// Let k be the index in treeEdges. k goes from 1 to n-2.
	// treeEdges[k] connects k+1 and k+2.
	// This edge determines the bottleneck for paths from any u <= k to v = k+2.
	// The bottleneck weight is treeEdges[k].w.
	
	k := 1
	u := 1

	for _, e := range nonTreeEdges {
		if k >= n-1 {
			fmt.Fprint(writer, "-1")
			return
		}

		// The current slot is (u, k+2).
		// The condition for a non-tree edge is that its weight must be >= max weight on path in MST.
		// Path max weight is treeEdges[k].w
		if treeEdges[k].w > e.w {
			fmt.Fprint(writer, "-1")
			return
		}

		results[e.id] = ResultEdge{u, k + 2}

		u++
		if u > k {
			u = 1
			k++
		}
	}

	for _, r := range results {
		fmt.Fprintln(writer, r.u, r.v)
	}
}
```