#include using namespace std; typedef signed long long ll; #undef _P #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) //------------------------------------------------------- class SCC { public: static const int MV = 500*500*2; vector > SC; int NV,GR[MV]; private: vector E[MV], RE[MV], NUM; int vis[MV]; public: void init(int NV) { this->NV=NV; for(int i=0;i=0;i--) if(!vis[NUM[i]]){ SC[c].clear(); revdfs(NUM[i],c); sort(SC[c].begin(),SC[c].end()); c++; } SC.resize(c); } }; class TwoSat { int NV; SCC sc; public: vector val; void init(int NV) { this->NV=NV*2; sc.init(NV*2); val.resize(NV);} void add_edge(int x,int y) { // k+0:normal k+NV:inverse sc.add_edge((x+NV/2)%NV,y); sc.add_edge((y+NV/2)%NV,x); } bool sat() { // empty:false sc.scc(); for(int i=0;isc.GR[i+NV/2]; return true; } }; TwoSat ts; int N; int S[505],T[505],U[505]; void solve() { int i,j,k,l,r,x,y; string s; cin>>N; ts.init(N*N); FOR(i,N) cin>>S[i]; FOR(i,N) cin>>T[i]; FOR(i,N) { cin>>U[i]; S[i]--; T[i]--; FOR(j,N) ts.add_edge(S[i]*N+j+(U[i]&1)*N*N,j*N+T[i]+(U[i]/2)*N*N); } if(ts.sat()) { FOR(y,N) { FOR(x,N) cout<