#include using namespace std; #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define pb push_back #define ppb pop_back typedef long long ll; typedef pair pii; typedef vector vi; typedef pair pl; typedef vector vl; typedef vector vvl; #define rep2(i, n) for (ll i = 0; i < (n); ++i) #define rep3(i, a, b) for (ll i = (a); i < (b); ++i) #define rep_select(_1, _2, _3, name, ...) name #define rep(...) rep_select(__VA_ARGS__, rep3, rep2)(__VA_ARGS__) #define rrep2(i, n) for (ll i = (ll)(n) - 1; i >= 0; --i) #define rrep3(i, a, b) for (ll i = (ll)(b) - 1; i >= (ll)(a); --i) #define rrep(...) rep_select(__VA_ARGS__, rrep3, rrep2)(__VA_ARGS__) ll n; bool judge(vvl ans,vl r,vl c){ rep(i,n){ vl cnt(n,0); rep(j,n) cnt[ans[i][j]]++; rep(j,n){ if(j!=r[i]&&cnt[j]>=cnt[r[i]]) return false; } } rep(j,n){ vl cnt(n,0); rep(i,n) cnt[ans[i][j]]++; rep(i,n){ if(i!=c[j]&&cnt[i]>=cnt[c[j]]) return false; } } return true; } void solve(){ cin >> n; vl r(n),c(n); rep(i,n) cin >> r[i],r[i]--; rep(i,n) cin >> c[i],c[i]--; if(n==1){ cout << 1 << endl; return; } map mp,rev; rep(i,n) mp[r[i]]=i,rev[i]=r[i]; rep(i,n) r[i]=mp[r[i]],c[i]=mp[c[i]]; vvl ans(n,vl(n)); rep(i,n){ rep(j,n){ ans[i][j]=i; } } vector seq; rep(i,n){ ll num=0; rep(j,n) if(c[j]==i) num++; seq.pb({num,i}); } sort(all(seq)); reverse(all(seq)); priority_queue pq; rep(i,n){ pq.push({n,i}); } //cout << "ok" << endl; for(auto [num,x]:seq){ //cout << num << x << endl; vl see; rep(i,n){ if(c[i]==x) see.pb(i); } for(ll i:see){ vector back; if(pq.empty()){ cout << -1 << endl; return; } if(pq.top().second==x){ back.pb(pq.top()); pq.pop(); } if(pq.empty()){ cout << -1 << endl; return; } auto [cnt,j]=pq.top(); pq.pop(); ans[j][i]=x; pq.push({cnt-1,j}); if(!back.empty()) pq.push({back[0]}); } } if(judge(ans,r,c)){ rep(i,n) { rep(j,n) cout << rev[ans[i][j]]+1 << " "; cout << endl; } } else{ cout << -1 << endl; } } int main() { ll t; cin >> t; rep(i,t) solve(); }