#include <bits/stdc++.h>
using namespace std;
struct edge {
  int v, nxt;
} e[400050];
int head[200050], ecnt;
void adde(int u, int v) {
  e[++ecnt].v = v;
  e[ecnt].nxt = head[u];
  head[u] = ecnt;
}
int from[200050], to[200050];
int ori[200050], type[200050];
int pcnt, n;
void dfs(int pos, int lst) {
  from[pos] = ++pcnt;
  type[pcnt] = ori[pos];
  for (int i = head[pos]; i; i = e[i].nxt) {
    int v = e[i].v;
    if (v != lst) dfs(v, pos);
  }
  to[pos] = pcnt;
}
struct tree {
  int sz, sum, lazy;
} tree[800050];
void Push_Up(int rt) {
  tree[rt].sz = tree[rt << 1].sz + tree[rt << 1 | 1].sz;
  tree[rt].sum = tree[rt << 1].sum + tree[rt << 1 | 1].sum;
}
void Push_Down(int rt) {
  if (tree[rt].lazy) {
    tree[rt << 1].lazy ^= 1;
    tree[rt << 1 | 1].lazy ^= 1;
    tree[rt << 1].sum = tree[rt << 1].sz - tree[rt << 1].sum;
    tree[rt << 1 | 1].sum = tree[rt << 1 | 1].sz - tree[rt << 1 | 1].sum;
    tree[rt].lazy = 0;
  }
}
void Build(int l, int r, int rt) {
  if (l == r) {
    tree[rt].sz = 1;
    tree[rt].sum = type[l];
    return;
  }
  int mid = (l + r) >> 1;
  Build(l, mid, rt << 1);
  Build(mid + 1, r, rt << 1 | 1);
  Push_Up(rt);
}
void Update(int l, int r, int ll, int rr, int rt) {
  if (l >= ll && r <= rr) {
    tree[rt].sum = tree[rt].sz - tree[rt].sum;
    tree[rt].lazy ^= 1;
    return;
  }
  Push_Down(rt);
  int mid = (l + r) >> 1;
  if (mid >= ll) Update(l, mid, ll, rr, rt << 1);
  if (mid < rr) Update(mid + 1, r, ll, rr, rt << 1 | 1);
  Push_Up(rt);
}
int Query(int l, int r, int ll, int rr, int rt) {
  if (l >= ll && r <= rr) return tree[rt].sum;
  Push_Down(rt);
  int mid = (l + r) >> 1, sum = 0;
  if (mid >= ll) sum += Query(l, mid, ll, rr, rt << 1);
  if (mid < rr) sum += Query(mid + 1, r, ll, rr, rt << 1 | 1);
  return sum;
}
int main() {
  scanf("%d", &n);
  int fa = 0;
  for (int i = 2; i <= n; ++i) {
    scanf("%d", &fa);
    adde(fa, i), adde(i, fa);
  }
  for (int i = 1; i <= n; ++i) scanf("%d", &ori[i]);
  dfs(1, 0);
  Build(1, n, 1);
  int q;
  char str[10] = {0};
  scanf("%d", &q);
  for (int i = 1; i <= q; ++i) {
    scanf(" %s", str + 1);
    int rt;
    scanf("%d", &rt);
    if (str[1] == 'g')
      printf("%d\n", Query(1, n, from[rt], to[rt], 1));
    else
      Update(1, n, from[rt], to[rt], 1);
  }
}
