对于集合a,定义集合S(a)表示集合a生成的集合,通过以下步骤任意多次:
初始,S(a)=a。
若存在x,y∈S(a),但是x ⊕ y ∉ S(a),将其插入到S(a)中。
现在给定集合a,b,你需要维护一个数据结构,支持以下操作,共m次:
1 x,表示插入x到集合a中,保证插入之前x ∉ a
2 x,表示插入x到集合b中,保证插入之前x ∉ b
3 x,表示从集合a中删除元素x,保证删除之前x ∈ a
4 x,表示从集合b中删除元素x,保证删除之前x ∈ b
5,表示询问:输出|S(a) ∪ S(b)| mod 998244353,即集合并的元素个数。
多组测试数据,每组测试数据中:
第一行输入两个个整数p,q表示a,b集合的大小。
第二行输入p个互不相同的整数,表示a中的元素。
第三行输入q个互不相同的整数,表示b中的元素。
第四行输入m,表示操作的次数。
接下来m行,第一个整数表示操作的类型,如果是1、2、3、4类型的操作,后面会跟着一个x,表示要插入或者删除的元素。
m ∈ [1,2*10^5]
初始给定的a,b满足:|a|,|b| ∈ [1, 10^5]
所有元素x范围:x ∈ [0, 2^63 - 1]
对于每组测试数据:
对于每个5类型操作,输出集合并的元素个数。
2 2 2 4 1 8 1 5
7