package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
buf, _ := io.ReadAll(os.Stdin)
pos := 0
nextInt := func() int {
for pos < len(buf) && buf[pos] <= ' ' {
pos++
}
if pos >= len(buf) {
return 0
}
res := 0
for pos < len(buf) && buf[pos] > ' ' {
res = res*10 + int(buf[pos]-'0')
pos++
}
return res
}
if pos >= len(buf) {
return
}
t := nextInt()
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
for tc := 0; tc < t; tc++ {
n := nextInt()
elementID := make(map[int]int)
m := 0
sets := make([][]int, n)
for i := 0; i < n; i++ {
k := nextInt()
sets[i] = make([]int, k)
for j := 0; j < k; j++ {
val := nextInt()
if id, exists := elementID[val]; exists {
sets[i][j] = id
} else {
elementID[val] = m
sets[i][j] = m
m++
}
}
}
V := n + m
adj := make([][]int, V)
deg := make([]int, V)
for i := 0; i < n; i++ {
for _, el := range sets[i] {
u := i
v := n + el
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
deg[u]++
deg[v]++
}
}
outAdj := make([][]int, V)
for i := 0; i < V; i++ {
for _, j := range adj[i] {
if deg[i] < deg[j] || (deg[i] == deg[j] && i < j) {
outAdj[i] = append(outAdj[i], j)
}
}
}
seenU := make([]int, V)
for i := range seenU {
seenU[i] = -1
}
seenV := make([]int, V)
ans1, ans2 := -1, -1
found := false
for u := 0; u < V; u++ {
for _, v := range adj[u] {
for _, w := range outAdj[v] {
if deg[u] < deg[w] || (deg[u] == deg[w] && u < w) {
if seenU[w] == u {
if u < n {
ans1, ans2 = u, w
} else {
ans1, ans2 = v, seenV[w]
}
found = true
break
} else {
seenU[w] = u
seenV[w] = v
}
}
}
if found {
break
}
}
if found {
break
}
}
if found {
fmt.Fprintf(writer, "%d %d\n", ans1+1, ans2+1)
} else {
fmt.Fprintln(writer, "-1")
}
}
}