#include using namespace std; #include using namespace atcoder; int main() { int N; cin >> N; vector D(N), W(N); for(int i = 0; i < N; ++i) cin >> D[i]; for(int i = 0; i < N; ++i) cin >> W[i]; dsu uf(N); vector f(N, 0); for(int i = 0; i < N; ++i) { const int u = (i - D[i] + N * 10000) % N, v = (i + D[i]) % N; if(u == v) f[u] = 1; uf.merge(u, v); } for(auto vec : uf.groups()) { int cnt = 0; bool flag = 1; for(auto v : vec) { if(W[v] == 0) cnt += 1; if(f[v]) flag = 0; } if(cnt % 2 == 1 and flag) { cout << "No\n"; return 0; } } cout << "Yes\n"; }