Language: C++

#include <iostream>
#include <algorithm>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <string.h>
#include <stack>
#include <assert.h>
#include <bitset>
#include <self/debug>
#define Endl endl
#define mp make_pair
#define ll long long 
#define ull unsinged long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define over(A) {cout<<A<<endl;exit(0);}
#define all(A) A.begin(),A.end()
#define ceil(a,b) ((a-1)/b+1)
#define quickcin ios_base::sync_with_stdio(false);
template <typename T1,typename T2> inline void chmin(T1 &x,T2 b) {if(b<x) x=b;}
template <typename T1,typename T2> inline void chmax(T1 &x,T2 b) {if(b>x) x=b;}
template <typename T1,typename T2> inline void chmod(T1 &x,T2 b) {x%=b,x+=b;if(x>=b) x-=b;}
const int inf=1039074182;
const ll llinf=1LL*inf*inf;
using namespace std;
int n;
vector <vector<vector<ll> > > res(64);
vector <ll> S,T,U,V;

template <typename T>
vector <vector<T> > trans(vector <T> vec)
{
	vector <vector<T> > v;
	for(int i=0;i<vec.size();i++)
	{
		v.push_back({vec[i]});
	}
	return v;
}

pair<bool,vector<vector<bool> > > solve(vector <bool> h,vector <bool> l)
{
	int n=h.size();
	int m=l.size();
	if(n==0 || m==0) return {1,{{}}};
	if(n==1 && m==1)
	{
		if(h[0]==l[0]) return {true,{{l[0]}}};else return {false,{{0}}};
	}
	if(n==1)
	{
		for(int i=0;i<m;i++)
		{
			if(h[0]==l[i]) return {true,{l}};
		}
		return {false,{l}};
	}
	if(m==1)
	{
		for(int i=0;i<n;i++)
		{
			if(h[i]==l[0]) return {true,trans(h)};
		}
		return {false,{l}};
	}
	vector <vector<bool> > res(n,vector <bool> (m));
	for(int i=0;i<n;i++)
	{
		res[i][i%m]=true;
	}
	for(int j=0;j<m;j++)
	{
		res[j%n][j]=true;
	}
	return mp(true,res);
}

bool getbit(ll mask,int k)
{
	return ((1LL<<k) & mask);
}

vector<vector<ll> > solve(int k)
{
	vector <vector<ll> > a(n);
	for(int i=0;i<n;i++)
	{
		a[i].resize(n);
	}
	vector <bool> h,l;
	vector <int> idh,idl;
	for(int i=0;i<n;i++)
	{
		if(S[i]==0 && !getbit(U[i],k)) h.push_back(0),idh.push_back(i);
		if(S[i]==1 && getbit(U[i],k)) h.push_back(1),idh.push_back(i);
	}
	for(int j=0;j<n;j++)
	{
		if(T[j]==0 && !getbit(V[j],k)) l.push_back(0),idl.push_back(j);
		if(T[j]==1 && getbit(V[j],k)) l.push_back(1),idl.push_back(j);
	}
	pair<bool,vector <vector<bool> > > o=solve(h,l);
	if(o.first==false)
	{
		a[0][0]=-1;
		return a;
	}
	vector <vector<bool> > &v=o.second;
	for(int i=0;i<n;i++)
	{
		if(S[i]==0 && getbit(U[i],k))
		{
			for(int j=0;j<n;j++)
			{
				a[i][j]=1;
			}
		}
		if(S[i]==1 && !getbit(U[i],k))
		{
			for(int j=0;j<n;j++)
			{
				a[i][j]=0;
			}
		}
	}
	for(int j=0;j<n;j++)
	{
		if(T[j]==0 && getbit(V[j],k))
		{
			for(int i=0;i<n;i++)
			{
				a[i][j]=1;
			}
		}
		if(T[j]==1 && !getbit(V[j],k))
		{
			for(int i=0;i<n;i++)
			{
				a[i][j]=0;
			}
		}
	}
//	cout<<h.size()<<' '<<l.size()<<' '<<idh<<' '<<idl<<endl;
//	cout<<v.size()<<' '<<v[0].size()<<endl;
	for(int i=0;i<h.size();i++)
	{
		for(int j=0;j<l.size();j++)
		{
			a[idh[i]][idl[j]]=v[i][j];
		}
	}
//	cout<<idh<<' '<<idl<<endl;
	return a;
}

int main()
{
//	freopen("input.txt","r",stdin);
	quickcin;
	cin>>n;
	S.resize(n);
	T.resize(n);
	U.resize(n);
	V.resize(n);
	for(int i=0;i<n;i++)
	{
		cin>>S[i];
	}
	for(int i=0;i<n;i++)
	{
		cin>>T[i];
	}
	for(int i=0;i<n;i++)
	{
		cin>>U[i];
	}
	for(int i=0;i<n;i++)
	{
		cin>>V[i];
	}
//	solve(0);
//	return 0;
	for(int i=0;i<64;i++)
	{
		res[i]=solve(i);
		if(res[i][0][0]==-1) over("-1");
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			ll t=0;
			for(int k=0;k<64;k++)
			{
				t|=(res[k][i][j]<<k);
			}
			cout<<t<<' ';
		}
		cout<<endl;
	}
	return 0;
}

Compiler output:
a.cc:15:10: fatal error: self/debug: No such file or directory
   15 | #include <self/debug>
      |          ^~~~~~~~~~~~
compilation terminated.