#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 par; vector siz; int c;//親の個数(グループ数) void init(int n){ c=n; for(int i=0;i>n; auto get=[&](int i,int j,bool on=false){ int ret=i*n+j; if(on) ret+=n*n; return ret; }; vector> g(2*n*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]; rep(i,n) s[i]--,t[i]--; rep(i,n){ if(u[i]==0){ rep(j,n){ // s=1->t=0 // t=1->s=0 g[get(s[i],j,1)].push_back(get(j,t[i])); g[get(j,t[i],1)].push_back(get(s[i],j)); } }if(u[i]==1){ rep(j,n){ // s=1->t=1 // t=0->s=0 g[get(s[i],j,1)].push_back(get(j,t[i],1)); g[get(j,t[i])].push_back(get(s[i],j)); } }if(u[i]==2){ rep(j,n){ // s=0->t=0 // t=1->s=1 g[get(s[i],j)].push_back(get(j,t[i])); g[get(j,t[i],1)].push_back(get(s[i],j,1)); } }if(u[i]==3){ rep(j,n){ // s=0->t=1 // t=0->s=1 g[get(s[i],j)].push_back(get(j,t[i],1)); g[get(j,t[i])].push_back(get(s[i],j,1)); } } } vector check(2*n*n,false); function dfs=[&](int now){ for(auto to:g[now]){ int ot; if(to>=n*n) ot=to-n*n; else ot=to+n*n; if(check[ot]){ check[now]=false; return false; } if(check[to]) continue; check[to]=true; if(!dfs(to)){ check[now]=false; return false; } } return true; }; rep(i,n){ rep(j,n){ // rep(I,n)rep(J,n) cout<