#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
const long long INF = 1e18;
const long long mod = 998244353;
vector<int> G[maxn];
int idx[maxn];
int didx[maxn];
int t[maxn];
int numOfSon[maxn];
int tot = 0;
void dfs(int u, int pre) {
  for (int i = 0; i < G[u].size(); i++) {
    int v = G[u][i];
    if (v == pre) continue;
    dfs(v, u);
    numOfSon[u] += numOfSon[v] + 1;
  }
  idx[u] = ++tot;
  didx[tot] = u;
}
int sum[maxn << 2];
int lazy[maxn << 2];
void up(int rt) { sum[rt] = sum[rt << 1] + sum[rt << 1 | 1]; }
void down(int l, int r, int rt) {
  if (!lazy[rt]) return;
  int mid = (l + r) / 2;
  lazy[rt << 1] += lazy[rt];
  lazy[rt << 1 | 1] += lazy[rt];
  if (lazy[rt] & 1) {
    sum[rt << 1] = (mid - l + 1) - sum[rt << 1];
    sum[rt << 1 | 1] = (r - mid) - sum[rt << 1 | 1];
  }
  lazy[rt] = 0;
}
void build(int l, int r, int rt) {
  lazy[rt] = sum[rt] = 0;
  if (l == r) {
    sum[rt] = t[didx[l]];
    return;
  }
  int mid = (l + r) >> 1;
  build(l, mid, rt << 1);
  build(mid + 1, r, rt << 1 | 1);
  up(rt);
}
void update(int L, int R, int k, int l, int r, int rt) {
  if (L <= l && r <= R) {
    lazy[rt] += k;
    sum[rt] = r - l + 1 - sum[rt];
    return;
  }
  down(l, r, rt);
  int mid = (l + r) >> 1;
  if (L <= mid) update(L, R, k, l, mid, rt << 1);
  if (R > mid) update(L, R, k, mid + 1, r, rt << 1 | 1);
  up(rt);
}
int query(int L, int R, int l, int r, int rt) {
  if (L <= l && r <= R) return sum[rt];
  down(l, r, rt);
  int mid = (l + r) >> 1;
  int ret = 0;
  if (L <= mid) ret += query(L, R, l, mid, rt << 1);
  if (R > mid) ret += query(L, R, mid + 1, r, rt << 1 | 1);
  up(rt);
  return ret;
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int x;
    scanf("%d", &x);
    G[x].push_back(i + 1);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &t[i]);
  }
  memset(numOfSon, 0, sizeof(numOfSon));
  dfs(1, 0);
  build(1, n, 1);
  int q;
  cin >> q;
  while (q--) {
    char s[4];
    int x;
    scanf("%s%d", s, &x);
    if (s[0] == 'g') {
      printf("%d\n", query(idx[x] - numOfSon[x], idx[x], 1, n, 1));
    } else {
      update(idx[x] - numOfSon[x], idx[x], 1, 1, n, 1);
    }
  }
}
