#include <bits/stdc++.h>
using namespace std;
int read() {
  int rt = 0, fl = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') fl = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    rt = rt * 10 + ch - '0';
    ch = getchar();
  }
  return rt * fl;
}
const int MAXN = 200050;
int n, m, h[MAXN], nx[MAXN << 1], to[MAXN << 1], tot, Li[MAXN], Ri[MAXN], cnt,
    tr[MAXN << 2][2], a[MAXN];
bool tag[MAXN << 2];
void add_edge(int x, int y) {
  to[++tot] = y;
  nx[tot] = h[x];
  h[x] = tot;
}
void link(int x, int y) {
  add_edge(x, y);
  add_edge(y, x);
}
void dfs(int x, int y) {
  Li[x] = ++cnt;
  for (int i = h[x]; i; i = nx[i]) {
    if (to[i] == y) continue;
    dfs(to[i], x);
  }
  Ri[x] = cnt;
}
void pushup(int x) {
  tr[x][0] = tr[x << 1][0] + tr[x << 1 | 1][0];
  tr[x][1] = tr[x << 1][1] + tr[x << 1 | 1][1];
}
void pushdown(int x) {
  if (tag[x]) {
    swap(tr[x << 1][0], tr[x << 1][1]);
    tag[x << 1] ^= 1;
    swap(tr[x << 1 | 1][0], tr[x << 1 | 1][1]);
    tag[x << 1 | 1] ^= 1;
    tag[x] ^= 1;
  }
}
int query(int x, int l, int r, int L, int R) {
  if (L <= l && R >= r) return tr[x][1];
  pushdown(x);
  int mid = (l + r) >> 1;
  if (R <= mid)
    return query(x << 1, l, mid, L, R);
  else if (L > mid)
    return query(x << 1 | 1, mid + 1, r, L, R);
  else
    return query(x << 1, l, mid, L, mid) +
           query(x << 1 | 1, mid + 1, r, mid + 1, R);
}
void modify(int x, int l, int r, int L, int R) {
  if (L <= l && R >= r) {
    swap(tr[x][0], tr[x][1]);
    tag[x] ^= 1;
    return;
  }
  pushdown(x);
  int mid = (l + r) >> 1;
  if (R <= mid)
    modify(x << 1, l, mid, L, R);
  else if (L > mid)
    modify(x << 1 | 1, mid + 1, r, L, R);
  else {
    modify(x << 1, l, mid, L, mid);
    modify(x << 1 | 1, mid + 1, r, mid + 1, R);
  }
  pushup(x);
}
void build(int x, int l, int r) {
  if (l == r) {
    tr[x][a[l]]++;
    return;
  }
  int mid = (l + r) >> 1;
  build(x << 1, l, mid);
  build(x << 1 | 1, mid + 1, r);
  pushup(x);
}
char buf[20];
int main() {
  n = read();
  for (int i = 2; i <= n; i++) {
    int t = read();
    link(i, t);
  }
  dfs(1, 0);
  for (int i = 1; i <= n; i++) {
    int t = read();
    a[Li[i]] = t;
  }
  build(1, 1, n);
  m = read();
  for (int i = 1; i <= m; i++) {
    scanf("%s", buf + 1);
    int t = read();
    if (buf[1] == 'g') {
      printf("%d\n", query(1, 1, n, Li[t], Ri[t]));
    } else {
      modify(1, 1, n, Li[t], Ri[t]);
    }
  }
  return 0;
}
