//#define _GLIBCXX_DEBUG
#include<bits/stdc++.h>
#define PI 3.14159265359
using namespace std;
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
const long long INF= 1e+18+1;
typedef long long ll;
typedef vector<ll> vl;
typedef vector<vector<ll> >vvl;
typedef pair<ll,ll> P;
typedef tuple<ll,ll,ll> T;
const ll MOD=2019LL;
string abc="abcdefghijklmnopqrstuvwxyz";
string ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
vl dx={-1,-1,-1,0,0,1,1,1};
vl dy={1,-1,0,1,-1,1,0,-1};

int main(){
  ll n;cin>>n;
  vl s(n),t(n),u(n),v(n);
  rep(i,n)cin>>s[i];
  rep(i,n)cin>>t[i];
  rep(i,n)cin>>u[i];
  rep(i,n)cin>>v[i];
  ll flag[64][510][510];
  ll dp[64][510][510];
  vl po(64);
  po[0]=1;
  for(ll i=1;i<64;i++)po[i]=po[i-1]*2;
  rep(i,64){
    rep(j,n){
      if(s[j]==1){
        //bitset<64>bit(u[j]);
        if(u[j]&(1<<i)){
          rep(k,n){
            dp[i][j][k]+=po[i];
          }
        }

      }
    }
    rep(j,n){
      if(t[j]==0){
        //bitset<64>bit(v[j]);
        if(!(v[j]&(1<<i))){
          rep(k,n){
            if(dp[i][k][j]>0)dp[i][k][j]-=po[i];
          }
        }
      }
    }
    rep(j,n){
      if(s[j]==0){
        //bitset<64>bit(u[j]);
        if(u[j]&(1<<i)){
          rep(k,n){
            if(dp[i][j][k]==0)dp[i][j][k]+=po[i];
            flag[i][j][k]=1;
          }
        }

      }
    }
    rep(j,n){
      if(t[j]==1){
        //bitset<64>bit(v[j]);
        if(!(v[j]&(1<<i))){
          rep(k,n){
            if(flag[i][k][j]){
              cout<<-1<<endl;
              return 0;
            }
            if(dp[i][k][j]>0)dp[i][k][j]-=po[i];
            flag[i][k][j]=1;
          }
        }
      }
    }
  }
  rep(j,n){
    rep(k,n){
      ll part=0;
      rep(i,32)part+=dp[i][j][k];
      cout<<part;
      if(k!=n-1)cout<<" ";
      else cout<<endl;
    }
  }
  //cout<<po[63]<<endl;
}
      
      
      
  