{"trustable":false,"sections":[{"title":"题意","value":{"format":"MD","content":"有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个开始为空的栈并且支持以下操作。\n+ `PUSH`:空集“{}”入栈。\n+ `DUP`:把当前栈顶元素复制一份后在入栈。\n+ `UNION`:出栈两个集合,然后把二者的并集入栈。\n+ `INTERSECT`:出栈两个集合,然后把二者的交集入栈。\n+ `ADD`:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈。\n\n例如,栈顶元素是`A\u003d{{},{{}}}`,下一个元素是`B\u003d{{},{{{}}}}`,则:\n`UNION` 操作将得到`{{},{{}},{{{}}}}`,输出3.\n`INTERSECT`操作将得到`{{}}`,输出1。\n`ADD` 操作将得到`{{},{{{}}},{{},{{}}}}`,输出3。\n"}},{"title":"输入","value":{"format":"MD","content":"第一行有一个整数$T$($0\\le T\\le 5$)表示有T组测试数据。\n每组测试数据有$N$($0\\le N\\le 2000$)次操作,保证操作均能顺利进行(不需要对空栈执行出栈操作)。"}},{"title":"输出","value":{"format":"MD","content":"对于输入中指定的每个操作,输出栈顶集合的大小(即元素个数)并换行。\n每组测试数据后输出一行`***`。"}},{"title":"样例输入","value":{"format":"MD","content":"```plaintext\n2\n9\nPUSH\nDUP\nADD\nPUSH\nADD\nDUP\nADD\nDUP\nUNION\n5\nPUSH\nPUSH\nADD\nPUSH\nINTERSECT\n```"}},{"title":"样例输出","value":{"format":"MD","content":"```plaintext\n0\n0\n1\n0\n1\n1\n2\n2\n2\n***\n0\n0\n1\n0\n0\n***\n```"}}]}