package main
import (
"bufio"
"fmt"
"os"
)
var in = bufio.NewReader(os.Stdin)
var out = bufio.NewWriter(os.Stdout)
func readAlpha(b *byte) error {
c, err := in.ReadByte()
for ; err == nil && (c < 'A' || c > 'Z'); c, err = in.ReadByte() {
}
for ; err == nil && c >= 'A' && c <= 'Z'; c, err = in.ReadByte() {
*b = c
return nil
}
return err
}
func readInt(b *int) error {
ans, read := 0, false
c, err := in.ReadByte()
for ; err == nil && (c < '0' || c > '9'); c, err = in.ReadByte() {
}
for ; err == nil && c >= '0' && c <= '9'; c, err = in.ReadByte() {
ans = ans *10 + int(c-'0')
read = true
}
if read {
*b = ans
return nil
}
return err
}
func main() {
defer out.Flush()
var n, q int
readInt(&n)
var edge = make([][]int, n+1)
var dp = make([]int, n+1)
var cost = make([]int, n+1)
for i := 2; i <= n; i++ {
var fa int
readInt(&fa)
edge[fa] = append(edge[fa], i)
}
for i:= 1; i <= n; i++ {
var c byte
readAlpha(&c)
if c == 'R' {
cost[i] =1
}
}
var dfs func(int, int)
dfs = func(root, fa int) {
dp[root] = cost[root]
for _, item := range edge[root] {
if item == fa {
continue
}
dfs(item, root)
dp[root] += dp[item]
}
}
dfs(1, -1)
readInt(&q)
for i := 0; i < q; i++ {
var val int
readInt(&val)
fmt.Fprintln(out, dp[val])
}
}