#include using namespace std; const int maxi=1e6+10; map, int > mp; int cnt[maxi]; int make_tree(int l, int r) { int sz=r-l+1; if (sz==1) return l; int node1=make_tree(l,(l+r)/2); int node2=make_tree((l+r)/2+1,r); cnt[max(mp[{node1,node2}],mp[{node2,node1}])]=1; if (mp[{node1,node2}]) return node1; return node2; } void solve() { int n; cin>>n; int p=1; int ok=0; mp.clear(); for (int i=1;i<=(n*(n-1))/2;i++) { int x,y; cin>>x>>y; mp[{x,y}]=i; } for (int i=1;i<=n*n;i++) cnt[i]=0; for (int i=1;i<=9;i++){ if (p==n) ok=1; p*=2; } if (!ok){ printf("-1\n"); return; } make_tree(1,n); printf("%d\n",(n*(n-1))/2-n+1); for (int i=1;i<=(n*(n-1))/2;i++) if (!cnt[i]) printf("%d ",i); printf("\n"); return; } int main() { int t; cin>>t; while(t--) solve(); return 0; }