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)
}
}
}
}