OI XIV - meg

// https://szkopul.edu.pl/problemset/problem/R6kgLB2Xz3fsLFYKA-4P9fzp/site/?key=statement
// OI XIV (2 etap)

// Megalopolis

#include <array>
#include <bitset>
#include <iostream>
#include <vector>

constexpr int sizik = 1000 * 1000;
constexpr int MAXN = 250 * 1000 + 7;

// std::array<int, sizik> arr;
std::array<int, MAXN> odl;

std::array<int, MAXN> pre;
std::array<int, MAXN> max_pre;

std::array<std::vector<int>, MAXN> kra;

std::bitset<MAXN> visited;

std::array<int, sizik> d;

void akt(int o, int x, int y, int A, int B) {
    if (A <= x && y <= B) {
        d[o]++;
        return;
    }
    if (B < x || y < A) return;
    akt(2 * o, x, (x + y) / 2, A, B);
    akt(2 * o + 1, (x + y) / 2 + 1, y, A, B);
}

int w_punkcie(int v, int ll) {
    v += ll - 1;
    int res = 0;
    while (v > 0) {
        res += d[v];
        v /= 2;
    }

    return res;
}

void DFS(int v, int& c, int curr = 0) {
    if (visited[v]) {
        return;
    }

    pre[v] = ++c;

    odl[v] = curr;
    visited[v] = true;

    for (int i = 0; i < kra[v].size(); i++) {
        DFS(kra[v][i], c, curr + 1);
    }

    max_pre[v] = c;
}

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n;
    std::cin >> n;

    for (int i = 0; i < n - 1; i++) {
        int a, b;
        std::cin >> a >> b;

        // arr[b] = a;

        kra[a].push_back(b);
        kra[b].push_back(a);
    }

    int temp = 0;
    DFS(1, temp);

    int ll = 1;

    while (ll < n)
        ll *= 2;

    int m;
    std::cin >> m;

    for (int i = 0; i < n + m - 1; i++) {
        char type;
        std::cin >> type;

        if (type == 'W') {
            int a;
            std::cin >> a;

            int ans = odl[a] - w_punkcie(pre[a], ll);

            std::cout << ans << '\n';
        } else if (type == 'A') {
            int a, b;
            std::cin >> a >> b;

            // pre[b], max_pre[b];
            akt(1, 1, ll, pre[b], max_pre[b]);
        }
    }

    return 0;
}