#include using namespace std; #define rep(i,a,b) for(ll i=a;i=b;i--) #define ll long long #define ull unsigned ll #define ld long double #define bl __int128_t #define fi first #define se second #define vel vector #define vvel vector #define pll pair #define vepll vector #define vvepll vector #define ves vector #define vem vector #define vvem vector #define pmm pair #define cleout(i) cout<using PQ=priority_queue,greater>; // 上 右 下 左 vector di={-1, 0, 1, 0}; vector dj={ 0, 1, 0,-1}; vector dx={ 0, 1, 0,-1}; vector dy={ 1, 0,-1, 0}; vector ddx={ 1, 1, 1, 0, -1, -1, -1, 0 }; vector ddy={ 1, 0, -1, -1, -1, 0, 1, 1 }; ll inf=1000000000000000000;//1e18 // LLONG_MAX mt19937_64 rng((ull)chrono::steady_clock::now().time_since_epoch().count()); void _solve(){ ll N; cin>>N; vel r(N); vel c(N); rep(i,0,N)cin>>r[i]; rep(i,0,N)cin>>c[i]; rep(i,0,N)r[i]--; vel ir(N); rep(i,0,N)ir[r[i]]=i; if(*max_element(c.begin(),c.end())==*min_element(c.begin(),c.end())){ if(N==1){ cout<<"1\n"; return ; } if(N<=4){ cout<<"-1\n"; return ; }else{ vvel ans(N,vel(N,-1)); pll now; now={(ir[c[0]-1]+1)%N,0}; rep(i,0,N){ if(i+1==N)now.fi++; now.fi%=N; ans[now.fi][now.se]=c[0]-1; now.fi++; now.se++; now.fi%=N; now.se%=N; } rep(i,0,N){ if(r[i]==c[0]-1){ rep(j,0,N)ans[i][j]=c[0]-1; }else{ rep(j,0,N){ if(ans[i][j]<0){ ans[i][j]=r[i]; } } } } rep(i,0,N){ rep(j,0,N)cout< ma; rep(i,0,N)ma[c[i]].push_back(i); rep(j,0,N){ rep(i,0,N){ nnans[i][ma[c[j]][idx[c[j]]]]=nans[i][j]; } idx[c[j]]++; } swap(ans,nnans); auto check=[&](){ rep(i,0,N){ vel cnt(N); rep(j,0,N){ cnt[ans[i][j]]++; } ll m=*max_element(cnt.begin(),cnt.end()); rep(j,0,N){ if(m==cnt[ans[i][j]]&&ans[i][j]!=r[i])return 0; } } return 1; }; if(check()){ rep(i,0,N){ rep(j,0,N){ cout<>_; else _=1; rep(__,0,_){ _solve(); } }