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

import (
	"bufio"
	"container/heap"
	"fmt"
	"os"
	"sort"
)

type Gap struct {
	L, R int64
	id   int
}

type Bridge struct {
	len int64
	id  int
}

type MinHeap []Gap

func (h MinHeap) Len() int           { return len(h) }
func (h MinHeap) Less(i, j int) bool { return h[i].R < h[j].R }
func (h MinHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }

func (h *MinHeap) Push(x interface{}) {
	*h = append(*h, x.(Gap))
}

func (h *MinHeap) Pop() interface{} {
	old := *h
	n := len(old)
	x := old[n-1]
	*h = old[0 : n-1]
	return x
}

func (h MinHeap) Top() Gap {
	return h[0]
}

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

	var n, m int
	fmt.Fscan(reader, &n, &m)

	islands := make([][2]int64, n)
	for i := 0; i < n; i++ {
		var l, r int64
		fmt.Fscan(reader, &l, &r)
		islands[i][0] = l
		islands[i][1] = r
	}

	if n-1 > m {
		fmt.Fprintln(writer, "No")
		return
	}

	gaps := make([]Gap, n-1)
	for i := 0; i < n-1; i++ {
		L := islands[i+1][0] - islands[i][1]
		R := islands[i+1][1] - islands[i][0]
		gaps[i] = Gap{L: L, R: R, id: i}
	}

	bridges := make([]Bridge, m)
	for i := 0; i < m; i++ {
		var a int64
		fmt.Fscan(reader, &a)
		bridges[i] = Bridge{len: a, id: i}
	}

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

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

	h := &MinHeap{}
	heap.Init(h)

	ans := make([]int, n-1)
	j := 0
	assigned := 0

	for _, b := range bridges {
		for j < len(gaps) && gaps[j].L <= b.len {
			heap.Push(h, gaps[j])
			j++
		}

		for h.Len() > 0 && h.Top().R < b.len {
			fmt.Fprintln(writer, "No")
			return
		}

		if h.Len() > 0 {
			gap := heap.Pop(h).(Gap)
			ans[gap.id] = b.id + 1
			assigned++
		}
	}

	if assigned == n-1 {
		fmt.Fprintln(writer, "Yes")
		for i := 0; i < n-1; i++ {
			if i > 0 {
				fmt.Fprint(writer, " ")
			}
			fmt.Fprint(writer, ans[i])
		}
		fmt.Fprintln(writer)
	} else {
		fmt.Fprintln(writer, "No")
	}
}
```