#include <bits/stdc++.h>
using namespace std;
const int Z = (int)3e3 + 228;
const int N = (int)2e5 + 228;
const int INF = (int)1e9 + 228;
const int MOD = (int)1e9 + 7;
const long long LLINF = (long long)1e18 + 228;
const long double eps = (long double)1e-6;
vector<int> g[N];
int a[N], tin[N], tout[N], pos[N], t[4 * N];
int ind, timer;
bool f[N], t_xor[4 * N];
void dfs(int v, int p) {
  a[++ind] = f[v];
  pos[v] = ind;
  tin[v] = ++timer;
  for (int to : g[v]) {
    if (to != p) dfs(to, v);
  }
  tout[v] = ++timer;
}
void push(int v, int tl, int tr) {
  if (t_xor[v]) {
    if (tl != tr) {
      t_xor[2 * v] ^= t_xor[v];
      t_xor[2 * v + 1] ^= t_xor[v];
    }
    t[v] = tr - tl + 1 - t[v];
    t_xor[v] = false;
  }
}
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v] = a[tl];
    return;
  }
  int mid = (tl + tr) / 2;
  build(2 * v, tl, mid);
  build(2 * v + 1, mid + 1, tr);
  t[v] = t[2 * v] + t[2 * v + 1];
}
void update(int v, int tl, int tr, int l, int r) {
  push(v, tl, tr);
  if (tl >= l && tr <= r) {
    t_xor[v] = 1;
    push(v, tl, tr);
    return;
  }
  if (tl > r || tr < l) {
    return;
  }
  int mid = (tl + tr) / 2;
  update(2 * v, tl, mid, l, r);
  update(2 * v + 1, mid + 1, tr, l, r);
  t[v] = t[2 * v] + t[2 * v + 1];
}
int get_sum(int v, int tl, int tr, int l, int r) {
  push(v, tl, tr);
  if (tl >= l && tr <= r) {
    return t[v];
  }
  if (tl > r || tr < l) {
    return 0;
  }
  int mid = (tl + tr) / 2;
  return get_sum(2 * v, tl, mid, l, r) + get_sum(2 * v + 1, mid + 1, tr, l, r);
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  srand(time(0));
  int n;
  cin >> n;
  for (int i = 2; i <= n; i++) {
    int x;
    cin >> x;
    g[x].push_back(i);
    g[i].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    cin >> f[i];
  }
  dfs(1, -1);
  build(1, 1, n);
  int q;
  cin >> q;
  while (q--) {
    string s;
    int v;
    cin >> s >> v;
    if (s == "pow") {
      int l = pos[v], r = l + (tout[v] - tin[v] + 1) / 2 - 1;
      update(1, 1, n, l, r);
    } else {
      int l = pos[v], r = l + (tout[v] - tin[v] + 1) / 2 - 1;
      cout << get_sum(1, 1, n, l, r) << "\n";
    }
  }
  return 0;
}
