#include <iostream>
#include <map>
#include <set>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
typedef set<int> Set;
map<Set,int> idcache;
vector<Set> setcache;
int id(Set x){
if(idcache.count(x)) return idcache[x];
setcache.push_back(x);
return idcache[x]=setcache.size()-1;
}
int main(){int turn;
cin>>turn;stack<int> s;
while(turn-->0)
{int num;
cin>>num;
for(int i=0;i<num;i++)
{ string a;
cin>>a;
if(a[0]=='P') s.push(id(Set()));
else if(a[0]=='D') s.push(s.top());
else{
Set x1=setcache[s.top()];s.pop();
Set x2=setcache[s.top()];s.pop();
Set x;
if(a[0]=='U') set_union(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin()));
if(a[0]=='I') set_intersection(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin()));
if(a[0]=='A') { x=x2;x.insert(id(x1)); }
s.push(id(x));
}
cout<<setcache[s.top()].size()<<endl;
if(num-1==i) cout<<"***"<<endl;
}
while (!s.empty()) s.pop();
}
return 0;
}