Advanced Ceiling Manufacturers (ACM) 正在分析其新型“极度防坍塌天花板”(ICPCs)的特性。一个 ICPC 由 $n$ 层材料组成,每一层都有一个不同的抗坍塌强度值(为一个正整数)。ACM 想要进行的分析是:获取各层的抗坍塌强度值,将它们存储在一棵二叉搜索树中,并检查这棵树的形状是否与整个结构的质量有任何关联。毕竟,为什么不呢?
具体来说,ACM 获取各层的抗坍塌强度值,按照从顶层到底层的顺序,将它们逐一插入到一棵树中。插入一个值 $v$ 的规则如下:
- 如果树为空,则将 $v$ 作为树的根。
- 如果树不为空,则将 $v$ 与树的根进行比较。如果 $v$ 较小,则将 $v$ 插入到根的左子树中,否则将 $v$ 插入到右子树中。
ACM 有一组想要通过尝试使其坍塌来分析的天花板原型。它希望将具有相同树形状的天花板原型归为一组,并一起进行分析。
例如,假设 ACM 正在考虑五个各有三层材料的天花板原型,如样例输入 1 所述,并如图 C.1 所示。注意,第一个原型的顶层抗坍塌强度值为 2,中间层为 7,底层为 1。第二个原型的各层抗坍塌强度值分别为 3、1 和 4——然而这两个原型产生了相同的树形状,因此 ACM 将把它们放在一起分析。
给定一组原型,你的任务是确定它们产生了多少种不同的树形状。
图 C.1:样例输入 1 中天花板原型所产生的四种树形状。
输入格式
输入的第一行包含两个整数 $n$ ($1 \le n \le 50$),表示要分析的天花板原型的数量;以及 $k$ ($1 \le k \le 20$),表示每个原型中的层数。
接下来的 $n$ 行描述了这些天花板原型。每一行包含 $k$ 个不同的整数(在 $1$ 到 $10^6$ 之间,包含边界值),这些是天花板原型中各层的抗坍塌强度值,按从顶到底的顺序排列。
输出格式
输出不同树形状的数量。
样例
样例输入 1
5 3 2 7 1 3 1 4 1 5 9 2 6 5 9 7 3
样例输出 1
4
样例输入 2
3 4 3 1 2 40000 3 4 2 1 33 42 17 23
样例输出 2
2