#include "circuit.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> info(2020);
ll n, m;
const ll mod = (1e9 + 2022);
void dfs(ll node, vector<vector<ll>> &g, vector<vector<ll>> &cnt){
for(ll i : g[node]) dfs(i, g, cnt);
ll c = g[node].size();
if(c == 0){
cnt[0][node] = (info[node] == 0);
cnt[1][node] = (info[node] == 1);
return;
}
vector<vector<vector<ll>>> dp(2, vector<vector<ll>>(c, vector<ll>(c)));
vector<ll> suff_zeros(c+1, 1);
for(ll i = c-1; i >= 0; i--) suff_zeros[i] = (cnt[0][g[node][i]] * suff_zeros[i+1]) % mod;
dp[1][1][0] = cnt[1][g[node][0]];
for(ll i = 0; i < c; i++) dp[1][0][i] = cnt[0][i];
for(ll k = 1; k <= c; k++){
for(ll j = 0; j < c; j++){
dp[1][k][j] = dp[1][k-1][j-1] * cnt[1][g[node][j]] * suff_zeros[j+1];
}
}
}
void init(int N, int M, std::vector<int> p, std::vector<int> a) {
n = N, m = M;
vector<vector<ll>> g(n+m);
for(ll i = 1; i < n+m; i++) g[p[i]].push_back(i);
for(ll i = 0; i < m; i++) info[n + i] = a[i];
}
int count_ways(int l, int r) {
ll ans = 0;
for(ll i = l; i <= r; i++) info[i] ^= 1;
for(ll i = 0; i < m; i++) ans += info[n + i];
return ans;
}