← Home
For problem statement at 1000-1999/1000-1099/1030-1039/1037/problemE.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1030-1039/1037/verifierE.go ends with panic: exit status 1

goroutine 1 [running]:
main.genCase(0x400006cee8)
	/home/ubuntu/codeforces/1000-1999/1000-1099/1030-1039/1037/verifierE.go:72 +0x544
main.main()
	/home/ubuntu/codeforces/1000-1999/1000-1099/1030-1039/1037/verifierE.go:90 +0x18c
exit status 2 can you fix the verifier? ```go
package main

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

var (
	buffer []byte
	next   int
)

func init() {
	buffer, _ = io.ReadAll(os.Stdin)
}

func readInt() int {
	for next < len(buffer) && (buffer[next] < '0' || buffer[next] > '9') {
		next++
	}
	if next >= len(buffer) {
		return 0
	}
	res := 0
	for next < len(buffer) && buffer[next] >= '0' && buffer[next] <= '9' {
		res = res*10 + int(buffer[next]-'0')
		next++
	}
	return res
}

func main() {
	n := readInt()
	m := readInt()
	k := readInt()

	if n == 0 || m == 0 {
		return
	}

	type Edge struct {
		to int
		id int
	}

	adj := make([][]Edge, n+1)
	edges := make([][2]int, m+1)
	deg := make([]int, n+1)
	active := make([]bool, n+1)

	for i := 1; i <= n; i++ {
		active[i] = true
	}

	for i := 1; i <= m; i++ {
		u := readInt()
		v := readInt()
		edges[i] = [2]int{u, v}
		adj[u] = append(adj[u], Edge{to: v, id: i})
		adj[v] = append(adj[v], Edge{to: u, id: i})
		deg[u]++
		deg[v]++
	}

	ans := n
	res := make([]int, m)
	queue := make([]int, 0)

	for i := 1; i <= n; i++ {
		if deg[i] < k {
			queue = append(queue, i)
		}
	}

	for head := 0; head < len(queue); head++ {
		w := queue[head]
		if !active[w] {
			continue
		}
		active[w] = false
		ans--
		for _, edge := range adj[w] {
			z := edge.to
			if active[z] {
				deg[z]--
				if deg[z] < k {
					queue = append(queue, z)
				}
			}
		}
	}
	res[m-1] = ans
	queue = queue[:0]

	for i := m; i >= 2; i-- {
		u, v := edges[i][0], edges[i][1]
		if active[u] && active[v] {
			deg[u]--
			if deg[u] < k {
				queue = append(queue, u)
			}
			deg[v]--
			if deg[v] < k {
				queue = append(queue, v)
			}
		}

		for head := 0; head < len(queue); head++ {
			w := queue[head]
			if !active[w] {
				continue
			}
			active[w] = false
			ans--
			for _, edge := range adj[w] {
				z, j := edge.to, edge.id
				if j < i && active[z] {
					deg[z]--
					if deg[z] < k {
						queue = append(queue, z)
					}
				}
			}
		}
		queue = queue[:0]
		res[i-2] = ans
	}

	out := bufio.NewWriter(os.Stdout)
	for i := 0; i < m; i++ {
		fmt.Fprintln(out, res[i])
	}
	out.Flush()
}
```