#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 100005;
int mine1[N],mine2[N];
int val[N];
int ans1[N],ans2[N];
int n;
bool flag1,flag2;
void solve()
{
flag1 = flag2 = true;
mine1[1] = 1;
mine2[1] = 0;
for(int i = 2; i <= n; i++)
{
if(flag1)
{
mine1[i] = val[i - 1] - mine1[i - 1] - mine1[i - 2];
if(mine1[i] != 0 && mine1[i] != 1)
flag1 = false;
}
if(flag2)
{
mine2[i] = val[i - 1] - mine2[i - 1] - mine2[i - 2];
if(mine2[i] != 0 && mine2[i] != 1)
flag2 = false;
}
}
if(val[n] != mine1[n - 1] + mine1[n])
flag1 = false;
if(val[n] != mine2[n - 1] + mine2[n])
flag2 = false;
};
int main(){
int T;
scanf("%d",&T);
while(T--){
memset(mine1,0,sizeof(mine1));
memset(mine2,0,sizeof(mine2));
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&val[i]);
solve();
int cnt1 = 0,cnt2 = 0;
if (flag1 && flag2){
for(int i = 1; i <= n; i++)
if (mine1[i] == 1 && mine2[i] == 1)
ans1[cnt1++] = i;
else if (mine1[i] == 0 && mine2[i] == 0)
ans2[cnt2++] = i;
}
else if(flag1){
for(int i = 1; i <= n; i++)
if (mine1[i] == 1)
ans1[cnt1++] = i;
else
ans2[cnt2++] = i;
}
else{
for(int i = 1; i <= n; i++)
if(mine2[i] == 1)
ans1[cnt1++] = i;
else
ans2[cnt2++] = i;
}
printf("%d", cnt1);
for (int i = 0; i < cnt1; i++)
printf(" %d", ans1[i]);
printf("\n%d", cnt2);
for (int i = 0; i < cnt2; i++)
printf(" %d", ans2[i]);
printf("\n");
}
return 0;
}