计算机科学领域中存在许多问题,其中一些比另一些更难。计算机科学家们据此对问题进行了分类,并喜欢分析这些类之间的相互作用。
复杂度类(complexity class)简单来说就是问题的集合;例如,复杂度类 $P$ 是指那些可以在输入规模的多项式时间内通过算法求解的判定问题集合。我们已知一些关于复杂度类之间关系的结论:例如,复杂度类 $P$ 中的每个问题也属于复杂度类 $NP$(即可以在多项式时间内验证“是”实例的判定问题集合)。然而,我们尚不清楚 $NP$ 中的每个问题是否也属于 $P$(今天我们不会要求你解决这个问题)。因此,$P$ 和 $NP$ 可能是同一个复杂度类,也可能是两个不同的复杂度类。另一方面,我们已知停机问题(Halting Problem)属于 $ALL$(所有判定问题的集合),但不属于 $R$(图灵机可判定的问题集合)。因此,$ALL$ 和 $R$ 是两个不同的复杂度类。
给定一系列关于复杂度类之间的关系,你能找出不同复杂度类的最小和最大数量吗?当且仅当存在某个问题属于其中一个类但不属于另一个类时,两个复杂度类才是不同的。
输入格式
输入首先包含两个以空格分隔的整数 $0 \le M, N \le 10^5$,且满足 $M + N > 0$。接下来的 $M$ 行,每行包含两个不同的、以空格分隔的复杂度类 $A_i$ 和 $B_i$,其中复杂度类是一个问题的集合,用一到八个大写或小写英文字母表示。这 $M$ 行中的每一行表示 $A_i \subseteq B_i$,意味着 $A_i$ 中的每个问题也都在 $B_i$ 中。类似地,接下来的 $N$ 行,每行包含两个不同的、以空格分隔的复杂度类 $A_j$ 和 $B_j$。这 $N$ 行中的每一行表示 $A_j \subsetneq B_j$,意味着 $A_j$ 中的每个问题都在 $B_j$ 中,且 $B_j$ 中至少有一个问题不在 $A_j$ 中。
输入中指定的任意两个不同复杂度类之间最多存在一种关系,且复杂度类之间的关系不会隐含任何逻辑矛盾。
输出格式
在一行中输出两个以空格分隔的整数:输入中给定的关系所涉及的复杂度类中,不同复杂度类的最小数量和最大数量。
样例
输入 1
1 0 P NP
输出 1
1 2
输入 2
0 1 R ALL
输出 2
2 2
输入 3
3 0 QMIP MIPstar MIPstar RE RE QMIP
输出 3
1 1
输入 4
11 8 NC P P BPP P coNP P NP BPP BQP coNP PSPACE BQP PSPACE NP PSPACE PSPACE EXPTIME EXPTIME NEXPTIME NEXPTIME EXPSPACE REG CFL CFL NC CFL CSL NC PSPACE CSL PSPACE EXPSPACE R R RE RE ALL
输出 4
7 16
样例 4 的示意图,其中虚线表示子集关系 ($\subseteq$),实线表示真子集关系 ($\subsetneq$)