← Home
For problem statement at 1000-1999/1000-1099/1010-1019/1019/problemC.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1010-1019/1019/verifierC.go ends with All tests passed can you fix the verifier? ```go
package main

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

type Scanner struct {
	buf  []byte
	pos  int
	size int
}

func NewScanner() *Scanner {
	return &Scanner{
		buf: make([]byte, 1024*1024),
	}
}

func (s *Scanner) nextInt() int {
	res := 0
	for {
		if s.pos >= s.size {
			n, err := os.Stdin.Read(s.buf)
			if err != nil && err != io.EOF {
				return 0
			}
			if n == 0 {
				return res
			}
			s.pos = 0
			s.size = n
		}
		b := s.buf[s.pos]
		s.pos++
		if b >= '0' && b <= '9' {
			res = int(b - '0')
			break
		}
	}
	for {
		if s.pos >= s.size {
			n, err := os.Stdin.Read(s.buf)
			if err != nil && err != io.EOF {
				return res
			}
			if n == 0 {
				return res
			}
			s.pos = 0
			s.size = n
		}
		b := s.buf[s.pos]
		if b >= '0' && b <= '9' {
			res = res*10 + int(b-'0')
			s.pos++
		} else {
			break
		}
	}
	return res
}

func writeInt(w *bufio.Writer, n int) {
	if n == 0 {
		w.WriteByte('0')
		return
	}
	var buf [20]byte
	i := 19
	for n > 0 {
		buf[i] = byte(n%10 + '0')
		n /= 10
		i--
	}
	w.Write(buf[i+1:])
}

func main() {
	sc := NewScanner()
	n := sc.nextInt()
	m := sc.nextInt()

	if n == 0 {
		return
	}

	headOut := make([]int, n+1)
	nextOut := make([]int, m+1)
	toOut := make([]int, m+1)

	headIn := make([]int, n+1)
	nextIn := make([]int, m+1)
	toIn := make([]int, m+1)

	for i := 1; i <= m; i++ {
		u := sc.nextInt()
		v := sc.nextInt()

		toOut[i] = v
		nextOut[i] = headOut[u]
		headOut[u] = i

		toIn[i] = u
		nextIn[i] = headIn[v]
		headIn[v] = i
	}

	alive := make([]bool, n+1)
	for i := 1; i <= n; i++ {
		alive[i] = true
	}

	L := make([]int, 0, n)
	for i := 1; i <= n; i++ {
		if alive[i] {
			L = append(L, i)
			alive[i] = false
			for e := headOut[i]; e != 0; e = nextOut[e] {
				v := toOut[e]
				alive[v] = false
			}
		}
	}

	inQ := make([]bool, n+1)
	var Q []int

	for i := len(L) - 1; i >= 0; i-- {
		u := L[i]
		hasEdge := false
		for e := headIn[u]; e != 0; e = nextIn[e] {
			if inQ[toIn[e]] {
				hasEdge = true
				break
			}
		}
		if !hasEdge {
			inQ[u] = true
			Q = append(Q, u)
		}
	}

	out := bufio.NewWriter(os.Stdout)
	writeInt(out, len(Q))
	out.WriteByte('\n')
	for i, v := range Q {
		if i > 0 {
			out.WriteByte(' ')
		}
		writeInt(out, v)
	}
	out.WriteByte('\n')
	out.Flush()
}
```