盘子运输公司是一家互联网零售商,顾名思义,他们专门销售盘子。他们以能提供来自众多制造商的种类最齐全的餐盘而自豪。
在最近的一次成本分析中,公司发现他们在包装盘子以供运输上花费了大量资金。部分原因是盘子在放入运输容器之前必须先堆叠起来。显然,这比预期的要耗费更多时间。也许你能帮上忙。
一批盘子由来自几家制造商的盘子组成。来自每家制造商的盘子都是堆叠好的,也就是说,每个盘子都排列成一个单一的堆叠,盘子按大小排序(最小的在顶部,最大的在底部)。我们将这样的堆叠称为“有序堆叠”。为了运输所有这些盘子,你必须将它们合并成一个单一的堆叠,且同样必须是有序的。为了将制造商的堆叠合并成一个单一的堆叠,允许进行两种操作:
- 拆分 (Split):通过提起堆叠的任意顶部部分并将其放在一边形成一个新的堆叠,可以将一个堆叠拆分为两个堆叠。
- 合并 (Join):通过将一个堆叠放在另一个堆叠的顶部,可以将两个堆叠合并。这仅在顶部堆叠的底部盘子不大于底部堆叠的顶部盘子时才被允许,也就是说,合并后的堆叠必须是有序的。
注意,任何堆叠的一部分都不能直接放在另一个堆叠的顶部。它必须先被拆分,然后拆分出来的部分才能与另一个堆叠合并。给定一组堆叠,你必须找到将它们转换为单一堆叠所需的最少操作次数。以下示例对应于样例输入,展示了两个堆叠如何在五次操作中转换为一个单一堆叠:
输入格式
每个测试用例以包含一个整数 $n$ ($1 \le n \le 50$) 的行开始,表示需要合并的堆叠数量。接下来是 $n$ 行,每行描述一个堆叠。这些行以一个整数 $h$ ($1 \le h \le 50$) 开头,表示堆叠的高度。该数字后面跟着 $h$ 个正整数,给出了从顶部到底部的盘子直径。所有直径最大为 $10\,000$。这些数字将按非递减顺序排列。
输出格式
对于每个测试用例,显示用例编号以及将给定堆叠合并为单一堆叠所需的最少操作次数(拆分和合并)。
样例
输入 1
2 3 1 2 4 2 3 5 3 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1
输出 1
Case 1: 5 Case 2: 2