#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
int n;
int a[MAXN];
vector<int> g[MAXN];
int tot;
int in[MAXN], out[MAXN];
int rev[MAXN];
void dfs(int u, int fa) {
  in[u] = ++tot;
  rev[tot] = u;
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == fa) continue;
    dfs(v, u);
  }
  out[u] = tot;
}
struct node {
  int sum, lazy;
} tre[MAXN * 4];
void push_up(int id) {
  tre[id].sum = tre[(id * 2)].sum + tre[(id * 2 + 1)].sum;
}
void build(int id, int l, int r) {
  tre[id].sum = tre[id].lazy = 0;
  if (l == r) {
    tre[id].sum = a[rev[l]];
    return;
  }
  build((id * 2), l, ((l + r) / 2));
  build((id * 2 + 1), ((l + r) / 2) + 1, r);
  push_up(id);
}
void push_down(int id, int l, int r) {
  tre[(id * 2)].sum = (((l + r) / 2) - l + 1) - tre[(id * 2)].sum;
  tre[(id * 2 + 1)].sum = (r - ((l + r) / 2)) - tre[(id * 2 + 1)].sum;
  tre[(id * 2)].lazy ^= 1;
  tre[(id * 2 + 1)].lazy ^= 1;
  tre[id].lazy ^= 1;
}
void update(int id, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) {
    tre[id].lazy ^= 1;
    tre[id].sum = (r - l + 1) - tre[id].sum;
    return;
  }
  if (tre[id].lazy) push_down(id, l, r);
  if (ql <= ((l + r) / 2)) update((id * 2), l, ((l + r) / 2), ql, qr);
  if (((l + r) / 2) + 1 <= qr)
    update((id * 2 + 1), ((l + r) / 2) + 1, r, ql, qr);
  push_up(id);
}
int query(int id, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) {
    return tre[id].sum;
  }
  if (tre[id].lazy) push_down(id, l, r);
  int res = 0;
  if (ql <= ((l + r) / 2)) res += query((id * 2), l, ((l + r) / 2), ql, qr);
  if (((l + r) / 2) + 1 <= qr)
    res += query((id * 2 + 1), ((l + r) / 2) + 1, r, ql, qr);
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    int x;
    scanf("%d", &x);
    g[x].push_back(i);
  }
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  tot = 0;
  dfs(1, 0);
  build(1, 1, n);
  int q;
  scanf("%d", &q);
  while (q--) {
    char s[7];
    int x;
    scanf("%s%d", s, &x);
    if (s[0] == 'g') {
      printf("%d\n", query(1, 1, n, in[x], out[x]));
    } else {
      update(1, 1, n, in[x], out[x]);
    }
  }
  return 0;
}
