#include <bits/stdc++.h>
using namespace std;
struct DSU {
vector<int> p, sz, hasRoot;
DSU(int n) : p(n+1), sz(n+1,1), hasRoot(n+1,0) {
iota(p.begin(), p.end(), 0);
}
int find(int x) {
return p[x] == x ? x : p[x] = find(p[x]);
}
void unite(int a, int b, int &blocks, long long &isolated) {
a = find(a); b = find(b);
if (a == b) return;
if (sz[a] < sz[b]) swap(a,b);
p[b] = a;
isolated -= (!hasRoot[a] ? sz[a] : 0);
isolated -= (!hasRoot[b] ? sz[b] : 0);
blocks -= (!hasRoot[a]);
blocks -= (!hasRoot[b]);
sz[a] += sz[b];
hasRoot[a] |= hasRoot[b];
isolated += (!hasRoot[a] ? sz[a] : 0);
blocks += (!hasRoot[a]);
}
void activate(int v, int &blocks, long long &isolated) {
int r = find(v);
if (!hasRoot[r]) {
blocks++;
isolated += sz[r];
}
}
void setRoot(int v, int &blocks, long long &isolated) {
int r = find(v);
if (!hasRoot[r]) {
isolated -= sz[r];
blocks--;
hasRoot[r] = 1;
}
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int subtask; cin >> subtask;
int n,q; cin >> n >> q;
vector<int> p(n+1);
for (int i=2;i<=n;i++) cin >> p[i];
vector<pair<char,int>> queries(q);
for (int i=0;i<q;i++) cin >> queries[i].first >> queries[i].second;
vector<char> has(n+1,0);
for (auto &qr : queries) {
if (qr.first == '+') has[qr.second] = 1;
else has[qr.second] = 0;
}
vector<char> active(n+1,0);
DSU dsu(n);
int blocks = 0;
long long isolated = 0;
vector<pair<int,long long>> ans(q);
for (int i=q-1;i>=0;i--) {
char t = queries[i].first;
int v = queries[i].second;
if (t == '+') {
if (!active[v]) {
active[v] = 1;
dsu.activate(v,blocks,isolated);
if (p[v] && active[p[v]]) dsu.unite(v,p[v],blocks,isolated);
for (int u=2;u<=n;u++) if (p[u]==v && active[u]) dsu.unite(v,u,blocks,isolated);
if (v == 1) dsu.setRoot(v,blocks,isolated);
}
} else {
if (active[v]) {
dsu.activate(v,blocks,isolated);
if (p[v] && active[p[v]]) dsu.unite(v,p[v],blocks,isolated);
for (int u=2;u<=n;u++) if (p[u]==v && active[u]) dsu.unite(v,u,blocks,isolated);
if (v == 1) dsu.setRoot(v,blocks,isolated);
active[v] = 0;
}
}
ans[i] = {blocks, isolated};
}
for (int i=0;i<q;i++) cout << ans[i].first << " " << ans[i].second << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgRFNVIHsKICAgIHZlY3RvcjxpbnQ+IHAsIHN6LCBoYXNSb290OwogICAgRFNVKGludCBuKSA6IHAobisxKSwgc3oobisxLDEpLCBoYXNSb290KG4rMSwwKSB7CiAgICAgICAgaW90YShwLmJlZ2luKCksIHAuZW5kKCksIDApOwogICAgfQogICAgaW50IGZpbmQoaW50IHgpIHsKICAgICAgICByZXR1cm4gcFt4XSA9PSB4ID8geCA6IHBbeF0gPSBmaW5kKHBbeF0pOwogICAgfQogICAgdm9pZCB1bml0ZShpbnQgYSwgaW50IGIsIGludCAmYmxvY2tzLCBsb25nIGxvbmcgJmlzb2xhdGVkKSB7CiAgICAgICAgYSA9IGZpbmQoYSk7IGIgPSBmaW5kKGIpOwogICAgICAgIGlmIChhID09IGIpIHJldHVybjsKICAgICAgICBpZiAoc3pbYV0gPCBzeltiXSkgc3dhcChhLGIpOwogICAgICAgIHBbYl0gPSBhOwogICAgICAgIGlzb2xhdGVkIC09ICghaGFzUm9vdFthXSA/IHN6W2FdIDogMCk7CiAgICAgICAgaXNvbGF0ZWQgLT0gKCFoYXNSb290W2JdID8gc3pbYl0gOiAwKTsKICAgICAgICBibG9ja3MgLT0gKCFoYXNSb290W2FdKTsKICAgICAgICBibG9ja3MgLT0gKCFoYXNSb290W2JdKTsKICAgICAgICBzelthXSArPSBzeltiXTsKICAgICAgICBoYXNSb290W2FdIHw9IGhhc1Jvb3RbYl07CiAgICAgICAgaXNvbGF0ZWQgKz0gKCFoYXNSb290W2FdID8gc3pbYV0gOiAwKTsKICAgICAgICBibG9ja3MgKz0gKCFoYXNSb290W2FdKTsKICAgIH0KICAgIHZvaWQgYWN0aXZhdGUoaW50IHYsIGludCAmYmxvY2tzLCBsb25nIGxvbmcgJmlzb2xhdGVkKSB7CiAgICAgICAgaW50IHIgPSBmaW5kKHYpOwogICAgICAgIGlmICghaGFzUm9vdFtyXSkgewogICAgICAgICAgICBibG9ja3MrKzsKICAgICAgICAgICAgaXNvbGF0ZWQgKz0gc3pbcl07CiAgICAgICAgfQogICAgfQogICAgdm9pZCBzZXRSb290KGludCB2LCBpbnQgJmJsb2NrcywgbG9uZyBsb25nICZpc29sYXRlZCkgewogICAgICAgIGludCByID0gZmluZCh2KTsKICAgICAgICBpZiAoIWhhc1Jvb3Rbcl0pIHsKICAgICAgICAgICAgaXNvbGF0ZWQgLT0gc3pbcl07CiAgICAgICAgICAgIGJsb2Nrcy0tOwogICAgICAgICAgICBoYXNSb290W3JdID0gMTsKICAgICAgICB9CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgc3VidGFzazsgY2luID4+IHN1YnRhc2s7CiAgICBpbnQgbixxOyBjaW4gPj4gbiA+PiBxOwogICAgdmVjdG9yPGludD4gcChuKzEpOwogICAgZm9yIChpbnQgaT0yO2k8PW47aSsrKSBjaW4gPj4gcFtpXTsKICAgIHZlY3RvcjxwYWlyPGNoYXIsaW50Pj4gcXVlcmllcyhxKTsKICAgIGZvciAoaW50IGk9MDtpPHE7aSsrKSBjaW4gPj4gcXVlcmllc1tpXS5maXJzdCA+PiBxdWVyaWVzW2ldLnNlY29uZDsKCiAgICB2ZWN0b3I8Y2hhcj4gaGFzKG4rMSwwKTsKICAgIGZvciAoYXV0byAmcXIgOiBxdWVyaWVzKSB7CiAgICAgICAgaWYgKHFyLmZpcnN0ID09ICcrJykgaGFzW3FyLnNlY29uZF0gPSAxOwogICAgICAgIGVsc2UgaGFzW3FyLnNlY29uZF0gPSAwOwogICAgfQoKICAgIHZlY3RvcjxjaGFyPiBhY3RpdmUobisxLDApOwogICAgRFNVIGRzdShuKTsKICAgIGludCBibG9ja3MgPSAwOwogICAgbG9uZyBsb25nIGlzb2xhdGVkID0gMDsKCiAgICB2ZWN0b3I8cGFpcjxpbnQsbG9uZyBsb25nPj4gYW5zKHEpOwoKICAgIGZvciAoaW50IGk9cS0xO2k+PTA7aS0tKSB7CiAgICAgICAgY2hhciB0ID0gcXVlcmllc1tpXS5maXJzdDsKICAgICAgICBpbnQgdiA9IHF1ZXJpZXNbaV0uc2Vjb25kOwogICAgICAgIGlmICh0ID09ICcrJykgewogICAgICAgICAgICBpZiAoIWFjdGl2ZVt2XSkgewogICAgICAgICAgICAgICAgYWN0aXZlW3ZdID0gMTsKICAgICAgICAgICAgICAgIGRzdS5hY3RpdmF0ZSh2LGJsb2Nrcyxpc29sYXRlZCk7CiAgICAgICAgICAgICAgICBpZiAocFt2XSAmJiBhY3RpdmVbcFt2XV0pIGRzdS51bml0ZSh2LHBbdl0sYmxvY2tzLGlzb2xhdGVkKTsKICAgICAgICAgICAgICAgIGZvciAoaW50IHU9Mjt1PD1uO3UrKykgaWYgKHBbdV09PXYgJiYgYWN0aXZlW3VdKSBkc3UudW5pdGUodix1LGJsb2Nrcyxpc29sYXRlZCk7CiAgICAgICAgICAgICAgICBpZiAodiA9PSAxKSBkc3Uuc2V0Um9vdCh2LGJsb2Nrcyxpc29sYXRlZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYWN0aXZlW3ZdKSB7CiAgICAgICAgICAgICAgICBkc3UuYWN0aXZhdGUodixibG9ja3MsaXNvbGF0ZWQpOwogICAgICAgICAgICAgICAgaWYgKHBbdl0gJiYgYWN0aXZlW3Bbdl1dKSBkc3UudW5pdGUodixwW3ZdLGJsb2Nrcyxpc29sYXRlZCk7CiAgICAgICAgICAgICAgICBmb3IgKGludCB1PTI7dTw9bjt1KyspIGlmIChwW3VdPT12ICYmIGFjdGl2ZVt1XSkgZHN1LnVuaXRlKHYsdSxibG9ja3MsaXNvbGF0ZWQpOwogICAgICAgICAgICAgICAgaWYgKHYgPT0gMSkgZHN1LnNldFJvb3QodixibG9ja3MsaXNvbGF0ZWQpOwogICAgICAgICAgICAgICAgYWN0aXZlW3ZdID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhbnNbaV0gPSB7YmxvY2tzLCBpc29sYXRlZH07CiAgICB9CgogICAgZm9yIChpbnQgaT0wO2k8cTtpKyspIGNvdXQgPDwgYW5zW2ldLmZpcnN0IDw8ICIgIiA8PCBhbnNbaV0uc2Vjb25kIDw8ICJcbiI7Cn0K