#include <bits/stdc++.h>
using namespace std;
vector<int> edge[200005 + 10];
int col[200005 + 10];
int T;
int st[200005 + 10], ed[200005 + 10];
int lazy[4 * 200005 + 10];
int tree[4 * 200005];
int store[200005 + 10];
void dfs(int v, int p) {
  st[v] = ++T;
  store[T] = v;
  for (int u : edge[v]) {
    if (u != p) {
      dfs(u, v);
    }
  }
  ed[v] = T;
}
void build(int pos, int lo, int hi) {
  if (lo == hi) {
    tree[pos] = col[store[lo]];
    return;
  }
  int mid = (lo + hi) / 2;
  int left = 2 * pos + 1;
  int right = 2 * pos + 2;
  build(left, lo, mid);
  build(right, mid + 1, hi);
  tree[pos] = tree[left] + tree[right];
}
void push(int pos, int lo, int hi) {
  if (!lazy[pos]) return;
  int mid = (lo + hi) / 2;
  int left = 2 * pos + 1;
  int right = 2 * pos + 2;
  lazy[left] ^= 1;
  lazy[right] ^= 1;
  lazy[pos] = 0;
  tree[left] = (mid - lo + 1) - tree[left];
  tree[right] = (hi - mid) - tree[right];
}
void update(int pos, int lo, int hi, int x, int y) {
  if (lo > y or hi < x) return;
  if (lo >= x and hi <= y) {
    lazy[pos] ^= 1;
    tree[pos] = (hi - lo + 1) - tree[pos];
    return;
  }
  int mid = (lo + hi) / 2;
  int left = 2 * pos + 1;
  int right = 2 * pos + 2;
  push(pos, lo, hi);
  update(left, lo, mid, x, y);
  update(right, mid + 1, hi, x, y);
  tree[pos] = tree[left] + tree[right];
}
int query(int pos, int lo, int hi, int x, int y) {
  if (lo > y or hi < x) return 0;
  if (lo >= x and hi <= y) return tree[pos];
  int mid = (lo + hi) / 2;
  int left = 2 * pos + 1;
  int right = 2 * pos + 2;
  push(pos, lo, hi);
  return query(left, lo, mid, x, y) + query(right, mid + 1, hi, x, y);
}
int main() {
  int n;
  cin >> n;
  for (int i = 2; i <= n; i++) {
    int a;
    cin >> a;
    edge[a].push_back(i);
    edge[i].push_back(a);
  }
  dfs(1, 0);
  for (int i = 1; i <= n; i++) {
    cin >> col[i];
  }
  build(0, 1, T);
  int q;
  cin >> q;
  while (q--) {
    string s;
    int v;
    cin >> s >> v;
    if (s[0] == 'p') {
      update(0, 1, T, st[v], ed[v]);
    } else {
      cout << query(0, 1, T, st[v], ed[v]) << endl;
    }
  }
}
