← Home
For problem statement at 1000-1999/1900-1999/1900-1909/1909/problemE.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1900-1909/1909/verifierE.go ends with wrong size on test 3 case 1: expected 1 nodes, got 3
exit status 1 can you fix the verifier? package main

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

func readInt(in *bufio.Reader) int {
	var n int
	var c byte
	for {
		c, _ = in.ReadByte()
		if c >= '0' && c <= '9' {
			break
		}
		if c == '-' {
			// Based on constraints, no negative numbers except potentially ignored
		}
	}
	for {
		n = n*10 + int(c-'0')
		c, _ = in.ReadByte()
		if c < '0' || c > '9' {
			break
		}
	}
	return n
}

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

	t := readInt(in)

	for tc := 0; tc < t; tc++ {
		n := readInt(in)
		m := readInt(in)

		if n >= 20 {
			for i := 0; i < m; i++ {
				readInt(in)
				readInt(in)
			}
			fmt.Fprintln(out, n)
			for i := 1; i <= n; i++ {
				fmt.Fprint(out, i, " ")
			}
			fmt.Fprintln(out)
		} else {
			req := make([]int, n+1)
			for i := 0; i < m; i++ {
				u := readInt(in)
				v := readInt(in)
				req[u] |= (1 << v)
			}

			for step := 0; step < n; step++ {
				for i := 1; i <= n; i++ {
					for j := 1; j <= n; j++ {
						if (req[i] & (1 << j)) != 0 {
							req[i] |= req[j]
						}
					}
				}
			}

			kMax := n / 5
			found := false
			ansMask := 0

			var check func(yMask int)
			check = func(yMask int) {
				xMask := 0
				xArr := make([]int, n+1)
				for i := 1; i <= n; i++ {
					val := (yMask >> i) & 1
					for j := 1; j < i; j++ {
						if i%j == 0 {
							val ^= xArr[j]
						}
					}
					xArr[i] = val
					if val == 1 {
						xMask |= (1 << i)
					}
				}

				if xMask == 0 {
					return
				}

				for i := 1; i <= n; i++ {
					if ((xMask >> i) & 1) == 1 {
						if (req[i] &^ xMask) != 0 {
							return
						}
					}
				}

				found = true
				ansMask = xMask
			}

			var gen func(idx, rem, currentYMask int)
			gen = func(idx, rem, currentYMask int) {
				if found {
					return
				}
				if rem == 0 {
					check(currentYMask)
					return
				}
				if idx > n {
					return
				}

				gen(idx+1, rem-1, currentYMask|(1<<idx))
				gen(idx+1, rem, currentYMask)
			}

			for sz := 0; sz <= kMax; sz++ {
				gen(1, sz, 0)
				if found {
					break
				}
			}

			if found {
				var res []int
				for i := 1; i <= n; i++ {
					if (ansMask>>i)&1 == 1 {
						res = append(res, i)
					}
				}
				fmt.Fprintln(out, len(res))
				for _, v := range res {
					fmt.Fprint(out, v, " ")
				}
				fmt.Fprintln(out)
			} else {
				fmt.Fprintln(out, -1)
			}
		}
	}
}