← Home
For problem statement at 2000-2999/2000-2099/2020-2029/2028/problemD.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2020-2029/2028/verifierD.go ends with All tests passed. can you fix the verifier? ```go
package main

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

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n {
		b := fs.data[fs.idx]
		if (b >= '0' && b <= '9') || b == '-' {
			break
		}
		fs.idx++
	}
	sign := 1
	if fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		b := fs.data[fs.idx]
		if b < '0' || b > '9' {
			break
		}
		val = val*10 + int(b-'0')
		fs.idx++
	}
	return sign * val
}

func main() {
	fs := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := fs.NextInt()
	for ; t > 0; t-- {
		n := fs.NextInt()

		q := make([]int, n+1)
		k := make([]int, n+1)
		j := make([]int, n+1)

		for i := 1; i <= n; i++ {
			q[i] = fs.NextInt()
		}
		for i := 1; i <= n; i++ {
			k[i] = fs.NextInt()
		}
		for i := 1; i <= n; i++ {
			j[i] = fs.NextInt()
		}

		reach := make([]bool, n+1)
		parent := make([]int, n+1)
		who := make([]byte, n+1)

		reach[1] = true

		bestQ, idxQ := q[1], 1
		bestK, idxK := k[1], 1
		bestJ, idxJ := j[1], 1

		for i := 2; i <= n; i++ {
			if bestQ > q[i] {
				reach[i] = true
				parent[i] = idxQ
				who[i] = 'q'
			} else if bestK > k[i] {
				reach[i] = true
				parent[i] = idxK
				who[i] = 'k'
			} else if bestJ > j[i] {
				reach[i] = true
				parent[i] = idxJ
				who[i] = 'j'
			}

			if reach[i] {
				if q[i] > bestQ {
					bestQ = q[i]
					idxQ = i
				}
				if k[i] > bestK {
					bestK = k[i]
					idxK = i
				}
				if j[i] > bestJ {
					bestJ = j[i]
					idxJ = i
				}
			}
		}

		if !reach[n] {
			out.WriteString("NO\n")
			continue
		}

		cards := make([]int, 0)
		players := make([]byte, 0)
		cur := n
		for cur != 1 {
			cards = append(cards, cur)
			players = append(players, who[cur])
			cur = parent[cur]
		}

		out.WriteString("YES\n")
		out.WriteString(strconv.Itoa(len(cards)))
		out.WriteByte('\n')
		for i := len(cards) - 1; i >= 0; i-- {
			out.WriteByte(players[i])
			out.WriteByte(' ')
			out.WriteString(strconv.Itoa(cards[i]))
			out.WriteByte('\n')
		}
	}
}
```