#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;
}