human
Solve in Python:
You are given a table $a$ of size $2 \times n$ (i.e. two rows and $n$ columns) consisting of integers from $1$ to $n$.

In one move, you can choose some column $j$ ($1 \le j \le n$) and swap values $a_{1, j}$ and $a_{2, j}$ in it. Each column can be chosen no more than once.

Your task is to find the minimum number of moves required to obtain permutations of size $n$ in both first and second rows of the table or determine if it is impossible to do that.

You have to answer $t$ independent test cases.

Recall that the permutation of size $n$ is such an array of size $n$ that contains each integer from $1$ to $n$ exactly once (the order of elements doesn't matter).

-----Input-----

The first line of the input contains one integer $t$ ($1 \le t \le 2 \cdot 10^4$) — the number of test cases. Then $t$ test cases follow.

The first line of the test case contains one integer $n$ ($1 \le n \le 2 \cdot 10^5$) — the number of columns in the table. The second line of the test case contains $n$ integers $a_{1, 1}, a_{1, 2}, \dots, a_{1, n}$ ($1 \le a_{1, i} \le n$), where $a_{1, i}$ is the $i$-th element of the first row of the table. The third line of the test case contains $n$ integers $a_{2, 1}, a_{2, 2}, \dots, a_{2, n}$ ($1 \le a_{2, i} \le n$), where $a_{2, i}$ is the $i$-th element of the second row of the table.

It is guaranteed that the sum of $n$ does not exceed $2 \cdot 10^5$ ($\sum n \le 2 \cdot 10^5$).

-----Output-----

For each test case print the answer: -1 if it is impossible to obtain permutation of size $n$ in both first and the second rows of the table, or one integer $k$ in the first line, where $k$ is the minimum number of moves required to obtain permutations in both rows, and $k$ distinct integers $pos_1, pos_2, \dots, pos_k$ in the second line ($1 \le pos_i \le n$) in any order — indices of columns in which you need to swap values to obtain permutations in both rows. If there are several answers, you can print any.

-----Example-----
Input
6
4
1 2 3 4
2 3 1 4
5
5 3 5 1 4
1 2 3 2 4
3
1 2 1
3...
assistant
#Here is Python code to find the minimum number of moves required to obtain permutations of size $n$ in both first and second rows of the table or determine if it is impossible to do that.

import sys
from collections import deque

input=sys.stdin.readline
#sys.setrecursionlimit(2*10**5)

for _ in range(int(input())):
    n=int(input())
    a=list(map(int,input().split()))
    b=list(map(int,input().split()))
    data=[[] for i in range(n)]
    for i in range(n):
        data[a[i]-1].append(i)
        data[b[i]-1].append(i)
    for i in range(n):
        if len(data[i])!=2:
            print(-1)
            break
    else:
        edge=[[] for i in range(n)]
        for i in range(n):
            u,v=data[i][0],data[i][1]
            edge[u].append((v,i))
            edge[v].append((u,i))

        seen=[False]*n
        temp=[]
        res=0
        def dfs(v,cond):
            nonlocal temp,res
            res.append(v)
            if cond==1:
                up,down=a[v],b[v]
            else:
                up,down=b[v],a[v]

            for nv,val in edge[v]:
                if not seen[nv]:
                    seen[nv]=True
                    if a[nv]==up or b[nv]==down:
                        temp.append(nv)
                        dfs(nv,-1)
                    else:
                        dfs(nv,1)

        def bfs(i):
            nonlocal temp,res
            deq=deque([(i,1)])
            while deq:
                v,cond=deq.popleft()
                res.append(v)
                if cond==1:
                    up,down=a[v],b[v]
                else:
                    up,down=b[v],a[v]

                for nv,val in edge[v]:
                    if not seen[nv]:
                        seen[nv]=True
                        if a[nv]==up or b[nv]==down:
                            temp.append(nv)
                            deq.append((nv,-1))
                        else:
                            deq.append((nv,1))

        ans=[]
        for i in range(0,n):
            if not seen[i]:
                res=[]
                temp=[]
                seen[i]=True
                bfs(i)
                if len(res)-len(temp)>=len(temp):
                    ans+=temp
               ...