#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = int64_t; using ull = uint64_t; using vl = vector; using vvl = vector;using vvvl = vector; using vb = vector; using vvb = vector;using vvvb = vector; using vs = vector; using vvs=vector>; using pl = pair; using vpl = vector;using vvpl = vector; using tl = tuple; using vtl = vector;using vvtl = vector>; using sl = set; using vsl = vector; using vvsl = vector; using ml = map; using vml = vector; using vvml = vector; using usl = unordered_set; using vusl = vector; using vvusl = vector; using uml = unordered_map; using vuml = vector; using vvuml = vector; using mint = atcoder::modint998244353; using vm = vector; using vvm = vector>; using vvvm = vector; #define rep1(a) for (ll _ = 0; _ < ll(a); ++_) #define rep2(i, a) for (ll i = 0; i < ll(a); ++i) #define rep3(i, a, b) for (ll i = a; i < ll(b); ++i) #define rrep1(a) for (ll i = (a)-1; i >= ll(0); --i) #define rrep2(i, a) for (ll i = (a)-1; i >= ll(0); --i) #define rrep3(i, a, b) for (ll i = (b)-1; i >= ll(a); --i) #define overload3(a, b, c, d, ...) d #define rep(...) overload3(__VA_ARGS__, rep3, rep2, rep1)(__VA_ARGS__) #define rrep(...) overload3(__VA_ARGS__, rrep3, rrep2, rrep1)(__VA_ARGS__) #define in(i,vec) for (auto i:(vec)) #define siz(a) ll(a.size()) void YesNo(bool a){cout<<(a?"Yes\n":"No\n");} template using pqueue = priority_queue>;//大きい順 template using pqueue_g = priority_queue, greater>;//小さい順 template bool chmin(T& x, T y){if(x>y){x=y;return true;}else return false;} template bool chmax(T& x, T y){if(x void sor(vector& v){sort(v.begin(),v.end());} template void sor_g(vector& v){sort(v.begin(),v.end(),greater<>());} template void vin(vector& v){size_t N = v.size();for(size_t i=0;i>v[i];} template void vvin(vector>& v){size_t N=v.size(),M=v[0].size();for(size_t i=0;i>v[i][j];} template T max(const vector& v){return *max_element(v.begin(),v.end());} template T min(const vector& v){return *min_element(v.begin(),v.end());} pair d1{1,0},d2{0,1},d3{-1,0},d4{0,-1},d5{1,1},d6{-1,1},d7{1,-1},d8{-1,-1}; ll inf = 1e18; int infi = 1e9; pl op(pl a,pl b){return min(a,b);} pl e(){return {inf,inf};} void solve(){ ll N; cin>>N; vpl R(N),C(N); rep(i,N){ ll r; cin>>r; --r; R[i]={r,i}; } rep(i,N){ ll c; cin>>c; --c; C[i]={c,i}; } sor(R); sor(C); if(N==1){ if(R[0].first == C[0].first){cout << 1 << endl;} else cout << -1 << endl; return; }else if(N==2){ cout << -1 << endl; return; } if(N==3 && C[0].first == C[N-1].first){ cout << -1 << endl; return; } if(N==4 && C[0].first == C[N-1].first){ cout << -1 << endl; return; } if(N == 3 && C[0].first == C[1].first || C[1].first == C[2].first){ vector v(3); iota(v.begin(), v.end(), 0); do{ ll f = 1; vector> ans(3,vector(3)); rep(i,0,3)rep(j,0,3) ans[i][j] = R[i].first+1; rep(i,0,3) ans[v[i]][i] = C[i].first+1; rep(i,0,3){ ll cnt = 0; rep(j,0,3) if(ans[j][i] == C[i].first+1) cnt++; if(cnt < 2){ f = 0; break; } } if(f){ rep(i,0,3){ rep(j,0,3) cout << ans[i][j] << " "; cout << endl; } break; } }while(next_permutation(v.begin(), v.end())); return; } atcoder::segtree seg(N); rep(i,N)seg.set(i,{0,i}); vvl A(N,vl(N,0)); rep(i,N)rep(j,N){ A[i][j]=R[i].first; } ll t=0; rep(i,N){ ll c = C[i].first; // pl tt = op(seg.prod(0,c),seg.prod(c+1,N)); // ll t = tt.second; if(c==t)t=(t+1)%N; A[t][i]=c; // seg.set(t,{tt.first+1,tt.second}); t=(t+1)%N; } // rep(i,N){ // rep(j,N)cerr<>T; rep(T)solve(); }