#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 7;
int tot;
int st[N];
int ed[N];
int sv[N];
vector<int> G[N];
int sum[N * 4];
int lazy[N * 4];
int cnt = 0;
int ppp[N];
void dfs(int u) {
  st[u] = ++tot;
  ppp[tot] = u;
  for (int i = 0; i < G[u].size(); i++) dfs(G[u][i]);
  ed[u] = tot;
}
void pushup(int rt) { sum[rt] = sum[rt * 2] + sum[rt * 2 + 1]; }
void pushdown(int rt, int len) {
  if (lazy[rt] != 0 && lazy[rt] % 2 == 1) {
    lazy[rt * 2]++;
    lazy[rt * 2 + 1]++;
    sum[rt * 2] = len - len / 2 - sum[rt * 2];
    sum[rt * 2 + 1] = len / 2 - sum[rt * 2 + 1];
    lazy[rt] = 0;
  } else if (lazy[rt] % 2 == 0)
    lazy[rt] = 0;
  return;
}
void build(int l, int r, int rt) {
  if (l == r) {
    sum[rt] = sv[ppp[++cnt]];
    return;
  }
  int mid = (l + r) / 2;
  build(l, mid, rt * 2);
  build(mid + 1, r, rt * 2 + 1);
  pushup(rt);
}
void update(int l, int r, int L, int R, int rt) {
  if (l <= L && r >= R) {
    sum[rt] = (R - L + 1) - sum[rt];
    lazy[rt]++;
    return;
  }
  pushdown(rt, R - L + 1);
  int mid = (L + R) / 2;
  if (l <= mid) update(l, r, L, mid, rt * 2);
  if (r > mid) update(l, r, mid + 1, R, rt * 2 + 1);
  pushup(rt);
}
int query(int l, int r, int L, int R, int rt) {
  if (l <= L && r >= R) {
    return sum[rt];
  }
  pushdown(rt, R - L + 1);
  int rec = 0;
  int mid = (L + R) / 2;
  if (l <= mid) rec += query(l, r, L, mid, rt * 2);
  if (r > mid) rec += query(l, r, mid + 1, R, rt * 2 + 1);
  return rec;
}
int main() {
  int n;
  while (cin >> n) {
    int u;
    memset(lazy, 0, sizeof(lazy));
    tot = 0;
    cnt = 0;
    for (int i = 2; i <= n; i++) {
      scanf("%d", &u);
      G[u].push_back(i);
    }
    dfs(1);
    for (int i = 1; i <= n; i++) scanf("%d", &sv[i]);
    build(1, n, 1);
    int q, x;
    cin >> q;
    char op[10];
    while (q--) {
      scanf("%s", op);
      if (op[0] == 'g') {
        scanf("%d", &x);
        int ans;
        ans = query(st[x], ed[x], 1, n, 1);
        cout << ans << endl;
      } else {
        scanf("%d", &x);
        update(st[x], ed[x], 1, n, 1);
      }
    }
  }
  return 0;
}
