#include<bits/stdc++.h>
using namespace std;
#define int long long
#define f(i,j,k) for(int i=j;i<=k;++i)
#define g(i,j,k) for(int i=j;i>=k;--i)
int n,m,s,l;
const int N=1e5;
int p[N],u[N],v[N],w[N],x,y,z;
vector<int>q[N];
queue<int>Q;
void dfs(int x,int y){
if(v[x])return;u[x]=y;v[x]=1;
f(t,0,m-1)dfs(x^(1<<t),y^t);
}
inline void doing(){
cin>>m;n=1<<m;z=0;
f(i,0,n)u[i]=v[i]=w[i]=0,q[i].clear();
f(i,1,n*m/2){
cin>>x>>y;
q[x].push_back(y);
q[y].push_back(x);
}
for(Q.push(0);Q.size();Q.pop()){
u[x=Q.front()]=1;p[w[x]]=x;
for(int y:q[x])if(!u[y]){
w[y]|=w[x]?w[x]:1<<z++;
if(!v[y])Q.push(y),v[y]=1;
}
}
f(i,0,n-1)printf("%lld ",p[i]);
puts("");
if(n%m)return puts("-1"),void();
f(i,0,n)u[i]=v[i]=0;dfs(0,0);
f(i,0,n-1)printf("%lld ",u[w[i]]);
puts("");
}
signed main(){
int t;
cin>>t;
while(t--)doing();
return 0;
}