#include <bits/stdc++.h>
using namespace std;
const int ROOT = 1;
vector<int> child[200003];
int idx = 0;
int parent[200003];
int arr[400003], mleft[400003], mright[400003];
int segtree[1600003], lazy[1600003];
void etour(int now) {
  arr[++idx] = now;
  mleft[now] = idx;
  for (int i : child[now]) {
    etour(i);
  }
  mright[now] = idx + 1;
  arr[++idx] = now;
}
void cek_lazy(int pos, int kir, int kan) {
  if (lazy[pos]) {
    segtree[pos] = ((kan - kir) + 1) - segtree[pos];
    if (kir != kan) {
      lazy[pos * 2] ^= 1;
      lazy[pos * 2 + 1] ^= 1;
    }
    lazy[pos] = 0;
  }
}
void update(int pos, int kir, int kan, int qkir, int qkan) {
  cek_lazy(pos, kir, kan);
  if (kir >= qkir && kan <= qkan) {
    segtree[pos] = ((kan - kir) + 1) - segtree[pos];
    if (kir != kan) {
      lazy[pos * 2] ^= 1;
      lazy[pos * 2 + 1] ^= 1;
    }
  } else if (kir > qkan || kan < qkir)
    return;
  else {
    int mid = (kir + kan) / 2;
    update(pos * 2, kir, mid, qkir, qkan);
    update(pos * 2 + 1, mid + 1, kan, qkir, qkan);
    segtree[pos] = segtree[pos * 2 + 1] + segtree[pos * 2];
  }
}
int query(int pos, int kir, int kan, int qkir, int qkan) {
  cek_lazy(pos, kir, kan);
  if (kir >= qkir && kan <= qkan)
    return segtree[pos];
  else if (kir > qkan || kan < qkir)
    return 0;
  else {
    int mid = (kir + kan) / 2;
    return query(pos * 2, kir, mid, qkir, qkan) +
           query(pos * 2 + 1, mid + 1, kan, qkir, qkan);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = 2; i <= n; i++) {
    cin >> parent[i];
    child[parent[i]].push_back(i);
  }
  etour(ROOT);
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    if (x) {
      update(1, 1, idx, mleft[i], mleft[i]);
      update(1, 1, idx, mright[i], mright[i]);
    }
  }
  int q;
  cin >> q;
  while (q--) {
    string s;
    cin >> s;
    int x;
    cin >> x;
    if (s == "get") {
      cout << query(1, 1, idx, mleft[x], mright[x]) / 2 << "\n";
    } else {
      update(1, 1, idx, mleft[x], mright[x]);
    }
  }
}
