#include using namespace std; template struct BitMatrix{ int H, W; vector> A; BitMatrix(int n) : H(n), W(MAX_COL), A(n) {} const bitset& operator[](int k) const { return A[k]; } bitset& operator[](int k) { return A[k]; } int gauss_jordan(bool extended = false) { int rank = 0; for(int j = 0; j < W - extended; j++) { int pivot = -1; for(int i = rank; i < H; i++) { if(A[i][j]){ pivot = i; break; } } if(pivot==-1)continue; swap(A[pivot], A[rank]); for (int i = 0 ; i < H ; i++) { if (i != rank && A[i][j])A[i]^=A[rank]; } rank++; } return rank; } std::pair> linear_equation(const std::vector& b) { assert(H == (int)b.size()); for (int i = 0; i < H; i++) A[i][W] = b[i]; int rank = gauss_jordan(true); for (int i = rank; i < H; i++) { if (A[i][W]) return {-1, std::vector{}}; } std::vector res(W, 0); for (int i = 0; i < rank; i++) res[i] = A[i][W]; return {rank, res}; } }; int main(){ int n; cin >> n; BitMatrix<101> B(n); vector d(n), w(n); for(auto &&v : d) cin >> v; for(auto &&v : w) cin >> v; for(int i = 0; i < n; i++){ B[(i + d[i]) % n][i] = 1; B[((i - d[i]) % n + n) % n][i] = 1; w[i] ^= 1; } auto ans = B.linear_equation(w); cout << (ans.first != -1 ? "Yes" : "No") << '\n'; }