#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int tim;
int t[maxn];
int sum[maxn], sum2[maxn];
int in[maxn], ou[maxn], dfn[maxn];
vector<int> G[maxn];
void dfs(int rt, int fa) {
  in[rt] = ++tim;
  dfn[tim] = rt;
  for (int i = 0; i < G[rt].size(); i++) {
    int to = G[rt][i];
    if (to == fa) continue;
    dfs(to, rt);
  }
  ou[rt] = tim;
}
struct T {
  int l, r, mid;
  int add, sum;
} tree[maxn << 2];
void push_up(int rt) {
  tree[rt].sum = tree[rt << 1].sum + tree[rt << 1 | 1].sum;
}
void push_down(int rt) {
  if (tree[rt].add) {
    tree[rt << 1].add ^= 1;
    tree[rt << 1].sum =
        (tree[rt << 1].r - tree[rt << 1].l + 1) - tree[rt << 1].sum;
    tree[rt << 1 | 1].add ^= 1;
    tree[rt << 1 | 1].sum =
        (tree[rt << 1 | 1].r - tree[rt << 1 | 1].l + 1) - tree[rt << 1 | 1].sum;
    tree[rt].add = 0;
  }
}
void build(int rt, int l, int r) {
  tree[rt].add = 0;
  tree[rt].l = l;
  tree[rt].r = r;
  if (l == r) {
    tree[rt].sum = t[dfn[l]];
    return;
  }
  int mid = tree[rt].mid = l + r >> 1;
  build(rt << 1, l, mid);
  build(rt << 1 | 1, mid + 1, r);
  push_up(rt);
}
void update(int rt, int l, int r) {
  if (tree[rt].r < l || tree[rt].l > r) return;
  if (tree[rt].l >= l && tree[rt].r <= r) {
    tree[rt].sum = (tree[rt].r - tree[rt].l + 1) - tree[rt].sum;
    tree[rt].add ^= 1;
    return;
  }
  push_down(rt);
  if (tree[rt].mid >= l) update(rt << 1, l, r);
  if (tree[rt].mid < r) update(rt << 1 | 1, l, r);
  push_up(rt);
}
int query(int rt, int l, int r) {
  if (tree[rt].r < l || tree[rt].l > r) return 0;
  if (tree[rt].l >= l && tree[rt].r <= r) return tree[rt].sum;
  push_down(rt);
  int ans = 0;
  if (tree[rt].mid >= l) ans += query(rt << 1, l, r);
  if (tree[rt].mid < r) ans += query(rt << 1 | 1, l, r);
  push_up(rt);
  return ans;
}
int main() {
  int n, x;
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    scanf("%d", &x);
    G[x].push_back(i);
    G[i].push_back(x);
  }
  for (int i = 1; i <= n; i++) scanf("%d", &t[i]);
  dfs(1, -1);
  build(1, 1, n);
  int q;
  scanf("%d", &q);
  while (q--) {
    char op[4];
    int v;
    scanf("%s%d", op, &v);
    if (op[0] == 'p')
      update(1, in[v], ou[v]);
    else
      printf("%d\n", query(1, in[v], ou[v]));
  }
  return 0;
}
