![]()
// LUOGU_RID: 122113992
//#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 200005
using namespace std;
struct star{
int nxt,to,id;
}e[N<<1];
int head[N],tot;
int T,n,size[N];
bool flag,cut[N];
void add(int u,int v,int w){
e[++tot].nxt=head[u];
e[tot].to=v;
e[tot].id=w;
head[u]=tot;
}
void dfs(int step,int father){
if(flag) return;
int f=0;
for(int i=head[step];i;i=e[i].nxt)
if(e[i].to==father) f=e[i].id;
else dfs(e[i].to,step),size[step]+=size[e[i].to];
// size[step]++;
if(size[step]==3) size[step]=0,cut[f]=1;//!!
else if(size[step]>3) flag=1;
}
void clear(){
tot=0;flag=1;
for(int i=1;i<=n;i++){
head[i]=cut[i]=0;
size[i]=1;
e[(i<<1)-1]=e[i<<1]={0,0,0};
}
}
int main(){
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(0);
cin>>T;
while(T--){
cin>>n;clear();
//if(n%3){ cout<<"-1\n";continue;}
//数据还未输入完 ,会导致错误,全部输入后 再 输出
//flag 就单一作用 指示是否 正确
for(int i=1,u,v;i<n;i++)
cin>>u>>v,add(u,v,i),add(v,u,i);
flag=n%3;
dfs(1,0);
if(flag) cout<<"-1\n";
else{
cout<<n/3-1<<"\n";
for(int i=1;i<n;i++)
if(cut[i]) cout<<i<<" ";
cout<<"\n";
}
}
return 0;
}