#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b> g; vector> to,from; vector comp,order,used; StronglyConnectedComponents(vector> &g): g(g),to(g.size()),from(g.size()),comp(g.size(),-1),used(g.size()){ for(int i=0;i> build(){ vector> t; for(int i=0;i> g; TwoSat(int v):sz(v),g(2*v){} // !x inline int rev(int x){ if(x>=sz) return x-sz; else return x+sz; } // u->v <=> !v->!u 2つ同時に張る void add_if(int u,int v){ g[u].push_back(v); g[rev(v)].push_back(rev(u)); } // u+v <=> !u->v and !v->u void add_or(int u,int v){ add_if(rev(u),v); } // not(u*v) <=> u->!v and v->!u void add_nand(int u,int v){ add_if(u,rev(v)); } // u <=> !u->u void set_true(int u){ g[rev(u)].push_back(u); } // !u <=> u->!u void set_false(int u){ g[u].push_back(rev(u)); } vector build(){ StronglyConnectedComponents scc(g); auto t=scc.build(); vector ret(sz); for(int i=0;i(); ret[i]=(scc[i]>scc[rev(i)]); } return ret; } }; signed main(){ cin.tie(0); ios::sync_with_stdio(0); int n;cin>>n; auto unfold=[&](int x){ return make_pair(x/n,x%n); }; vector s(n),t(n),u(n); rep(i,n) cin>>s[i]; rep(i,n) cin>>t[i]; rep(i,n) cin>>u[i]; TwoSat ts(n*n); rep(i,n){ s[i]--,t[i]--; rep(j,n){ int a=s[i]*n+j,b=j*n+t[i]; if(u[i]==0) ts.add_nand(ts.rev(a),ts.rev(b)); if(u[i]==1) ts.add_nand(a,ts.rev(b)); if(u[i]==2) ts.add_nand(ts.rev(a),b); if(u[i]==3) ts.add_nand(a,b); } } auto res=ts.build(); if(res.empty()) cout<<-1<