Language: C++

#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <fstream>
#include <sstream>
#include <iomanip>
#define ll long long

using namespace std;

long long MOD = 1000000007;

template<typename T>
void cout_vec(vector<T> &vec){
    for(int i=0; i<vec.size(); i++){
        if (i!=0){
            cout << ' ';
        }
        cout << vec[i];
    }
    cout << endl;
}

template<typename T>
void cout_mat(vector<vector<T>  > &mat){
    for(int i=0; i<mat.size(); i++){
        vector<T> vec = mat[i];
        cout_vec(mat[i]);
    }
}

int main(){
    int N;
    cin >> N;
    vector<vector<ll>> ans(N,vector<ll>(N,0));
    vector<vector<ll>> STUV(4,vector<ll>(N,0));
    for(auto &line:STUV){
        for(auto &x:line){
            cin >> x;
        }
    }

    int S0;
    int S1;
    for(int i=0; i<N; i++){
        int x=STUV[0][i];
        if(x==0){
            S0++;
        }else{
            S1++;
        }
        for(int j=0; j<N; j++){
            ans[i][j]=STUV[2][j];
        }
    }

    int tmp1,tmp2;
    tmp1=tmp2=-1;
    for(int j=0; j<N; j++){
        int flag=0;
        if(STUV[1][j]==0){
            for(int i=0; i<N; i++){
                if(STUV[0][i]==0){
                    ans[i][j]=ans[i][j]|STUV[3][j];
                }else{
                    //cout << tmp1 << ' '  << flag << ' ' << S1 << ' '<< (int)(STUV[3][j]) <<endl;
                    if((tmp1!=i && flag==0)||S1==1){
                        ans[i][j]=ans[i][j]-(ans[i][j]&~STUV[3][j]);
                        tmp1=i;
                        flag=1;
                    }
                }
            }
        }else{
            for(int i=0; i<N; i++){
                if(STUV[0][i]==0){
                    if((tmp2!=i && flag==0)||S0==1){
                        ans[i][j]=ans[i][j]|STUV[3][j];
                        tmp2=i;
                        flag=1;
                    }
                }else{
                    ans[i][j]=ans[i][j]-(ans[i][j]&(~STUV[3][j]));
                }
            }
        }
    }
    cout_mat(ans);
    return 0

    for(int i=0; i<N; i++){
        if(STUV[0][i]==0){
            ll tmp=(1<<64)-1;
            for(int j=0; j<N; j++){
                tmp&=ans[i][j];
            }
            if(tmp!=STUV[2][i]){
                cout<<-1<<endl;
                return 0;
            }
        }else{
            ll tmp=0;
            for(int j=0; j<N; j++){
                tmp|=ans[i][j];
            }
            if(tmp!=STUV[2][i]){
                cout<<-1<<endl;
                return 0;
            }
        }
    }
    //cout_mat(ans);

    for(int j=0; j<N; j++){
        if(STUV[1][j]==0){
            ll tmp=(1<<64)-1;
            for(int i=0; i<N; i++){
                tmp&=ans[i][j];
            }
            if(tmp!=STUV[3][j]){
                cout<<-1<<endl;
                return 0;
            }
        }else{
            ll tmp=0;
            for(int i=0; i<N; i++){
                tmp|=ans[i][j];
            }
            if(tmp!=STUV[3][j]){
                cout<<-1<<endl;
                return 0;
            }
        }
    }
    cout_mat(ans);
}

Compiler output:
a.cc: In function 'int main()':
a.cc:94:13: error: expected ';' before 'for'
   94 |     return 0
      |             ^
      |             ;
   95 | 
   96 |     for(int i=0; i<N; i++){
      |     ~~~      
a.cc:98:22: warning: left shift count >= width of type [-Wshift-count-overflow]
   98 |             ll tmp=(1<<64)-1;
      |                     ~^~~~
a.cc:121:22: warning: left shift count >= width of type [-Wshift-count-overflow]
  121 |             ll tmp=(1<<64)-1;
      |                     ~^~~~