#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define sz(a) (int)(a.size())
#define all(a) a.begin(),a.end()
#define lb lower_bound
#define ub upper_bound
#define owo ios_base::sync_with_stdio(0);cin.tie(0);
#define MOD (ll)(1e9+7)
#define INF (ll)(1e18)
#define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr)
#define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\
debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC))
typedef long long int ll;
typedef long double ld;
typedef pair<ll,ll> PII;
typedef pair<int,int> pii;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> VII;
ll gcd(ll a,ll b){if(!b)return a;else return gcd(b,a%b);}
int main()
{
	owo
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		vector<int>p(1<<n),ans(1<<n),cnt(1<<n);
		vii adj(1<<n);
		for(int i=0;i<n*(1<<(n-1));i++){
			int v,u;
			cin>>v>>u;
			adj[v].pb(u);
			adj[u].pb(v);
		}
		p[0] = 0;
		int z = 1;
		for(int x:adj[0]){
			p[z] = x;
			ans[x] = z;
			z*=2;
		}
		for(int i=3;i<(1<<n);i++){
			if(p[i])continue;
			vector<int>c;
			int bit = 0;
			for(int j=0;j<n;j++){
				if(i&(1<<j)){
					bit++;
					for(int x:adj[p[i-(1<<j)]]){c.pb(x);cnt[x]++;}
				}
			}
			for(int x:c){
				if(cnt[x] == bit && x && !ans[x]){
					p[i] = x;
					ans[x] = i;
					break;
				} 
			}
			for(int x:c)cnt[x] = 0;
		}
		for(int x:p)cout<<x<<" ";
		cout<<'\n';
		z = 1;
		while(z<n)z*=2;
		if(n!=z)cout<<-1<<'\n';
		else{
			for(int i=0;i<(1<<n);i++){
				int res = 0;
				for(int j=0;j<n;j++){
					if(i & (1<<j))res^=j;
				}
				p[i] = res;
			}
			for(int i=0;i<(1<<n);i++)cout<<p[ans[i]]<<" ";
			cout<<'\n'; 	
		}
	}
	
}
