← Home
package main

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

var allValidS [20][]int

func init() {
	for n := 1; n < 20; n++ {
		maxL := n / 5
		var dfs func(idx int, countL int, L int)
		dfs = func(idx int, countL int, L int) {
			if countL > maxL {
				return
			}
			if idx == n+1 {
				if countL > 0 {
					S := 0
					for i := 1; i <= n; i++ {
						val := (L >> i) & 1
						for d := 1; d < i; d++ {
							if i%d == 0 {
								val ^= (S >> d) & 1
							}
						}
						S |= (val << i)
					}
					allValidS[n] = append(allValidS[n], S)
				}
				return
			}
			dfs(idx+1, countL, L)
			dfs(idx+1, countL+1, L|(1<<idx))
		}
		dfs(1, 0, 0)
	}
}

func readInt(r *bufio.Reader) int {
	var n int
	var c byte
	var err error
	for {
		c, err = r.ReadByte()
		if err != nil || (c >= '0' && c <= '9') {
			break
		}
	}
	if err != nil {
		return 0
	}
	for c >= '0' && c <= '9' {
		n = n*10 + int(c-'0')
		c, err = r.ReadByte()
		if err != nil {
			break
		}
	}
	return n
}

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

	t := readInt(reader)
	if t == 0 {
		return
	}

	var req [21]int

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

		if n < 20 {
			for i := 1; i <= n; i++ {
				req[i] = 0
			}
		}

		for i := 0; i < m; i++ {
			u := readInt(reader)
			v := readInt(reader)
			if n < 20 {
				req[u] |= (1 << v)
			}
		}

		if n >= 20 {
			fmt.Fprintln(writer, n)
			for i := 1; i <= n; i++ {
				if i > 1 {
					fmt.Fprint(writer, " ")
				}
				fmt.Fprint(writer, i)
			}
			fmt.Fprintln(writer)
		} else {
			foundS := -1
			for _, S := range allValidS[n] {
				ok := true
				for u := 1; u <= n; u++ {
					if (S & (1 << u)) != 0 {
						if (S & req[u]) != req[u] {
							ok = false
							break
						}
					}
				}
				if ok {
					foundS = S
					break
				}
			}

			if foundS == -1 {
				fmt.Fprintln(writer, "-1")
			} else {
				count := 0
				for i := 1; i <= n; i++ {
					if (foundS & (1 << i)) != 0 {
						count++
					}
				}
				fmt.Fprintln(writer, count)
				first := true
				for i := 1; i <= n; i++ {
					if (foundS & (1 << i)) != 0 {
						if !first {
							fmt.Fprint(writer, " ")
						}
						fmt.Fprint(writer, i)
						first = false
					}
				}
				fmt.Fprintln(writer)
			}
		}
	}
}