#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
const int INF = 1 << 30;
struct seg {
  int l, r, s;
  seg(int ll = 0, int rr = 0, int ss = 0) : l(ll), r(rr), s(ss) {}
} node[maxn];
int cnt;
int a[maxn];
vector<int> G[maxn];
void dfs(int u, int fa) {
  node[u].l = cnt++;
  a[node[u].l] = node[u].s;
  for (int i = 0; i < G[u].size(); i++) {
    int v = G[u][i];
    if (v == fa) continue;
    dfs(v, u);
  }
  node[u].r = cnt - 1;
}
int Cnt[maxn << 2], rev[maxn << 2];
void PushUp(int rt) { Cnt[rt] = Cnt[rt << 1] + Cnt[rt << 1 | 1]; }
void PushDown(int l, int r, int rt) {
  if (rev[rt]) {
    int m = (l + r) >> 1;
    rev[rt << 1] ^= 1;
    Cnt[rt << 1] = m - l + 1 - Cnt[rt << 1];
    rev[rt << 1 | 1] ^= 1;
    Cnt[rt << 1 | 1] = r - m - Cnt[rt << 1 | 1];
    rev[rt] = 0;
  }
}
void Build(int l, int r, int rt) {
  if (l == r) {
    rev[rt] = 0;
    Cnt[rt] = a[l];
    return;
  }
  int m = (l + r) >> 1;
  Build(l, m, rt << 1);
  Build(m + 1, r, rt << 1 | 1);
  PushUp(rt);
}
void Reverse(int L, int R, int l, int r, int rt) {
  if (L <= l && r <= R) {
    rev[rt] ^= 1;
    Cnt[rt] = r - l + 1 - Cnt[rt];
    return;
  }
  PushDown(l, r, rt);
  int m = (l + r) >> 1;
  if (L <= m) Reverse(L, R, l, m, rt << 1);
  if (R > m) Reverse(L, R, m + 1, r, rt << 1 | 1);
  PushUp(rt);
}
int Query(int L, int R, int l, int r, int rt) {
  if (L <= l && r <= R) {
    return Cnt[rt];
  }
  PushDown(l, r, rt);
  int m = (l + r) >> 1;
  int ret = 0;
  if (L <= m) ret += Query(L, R, l, m, rt << 1);
  if (R > m) ret += Query(L, R, m + 1, r, rt << 1 | 1);
  return ret;
}
int main() {
  int n;
  scanf("%d", &n);
  int f;
  for (int i = 2; i <= n; i++) {
    scanf("%d", &f);
    G[f].push_back(i);
  }
  int s;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &node[i].s);
  }
  cnt = 1;
  dfs(1, 0);
  Build(1, n, 1);
  int q;
  scanf("%d", &q);
  char op[10];
  int u;
  while (q--) {
    scanf("%s%d", op, &u);
    if (op[0] == 'p') {
      Reverse(node[u].l, node[u].r, 1, n, 1);
    } else {
      printf("%d\n", Query(node[u].l, node[u].r, 1, n, 1));
    }
  }
  return 0;
}
