教授的作业明天就要截止了。为了完成任务,学生们必须在图书馆复印许多参考书的页面。
所有的参考书都存放在储藏室里,只有图书管理员可以进入。为了获得参考书某一页的复印件,学生需要请求图书管理员进行复印。图书管理员从储藏室取出书籍,并根据请求制作页面复印件。整体情况如图 1 所示。
图 1:图书馆
学生们在柜台前排队。一次只能请求一本书。如果一个学生还有更多的请求,该学生在请求被处理后会排到队伍的末尾。
在储藏室里,有 $m$ 个书桌 $D_1, \dots, D_m$ 和一个书架。它们按此顺序从门口到房间内部排列。每个书桌上最多可以放置 $c$ 本书。如果学生请求一本书,图书管理员会进入储藏室,按 $D_1, \dots, D_m$ 的顺序查找,最后查找书架。找到书后,图书管理员将其取出,并给学生提供页面复印件。
然后,图书管理员带着请求的书籍回到储藏室,并按照以下程序将其放置在 $D_1$ 上:
- 如果 $D_1$ 未满(换句话说, $D_1$ 上的书籍数量 $< c$),图书管理员将请求的书籍放在那里。
- 如果 $D_1$ 已满,图书管理员:
- 将请求的书籍暂时放在离入口最近的非满书桌上,如果所有书桌都已满,则放在书架上;
- 找到 $D_1$ 上最久未被请求的书籍(即最近最少使用书籍)并将其取出;
- 将其放在离入口最近的非满书桌(除 $D_1$ 外)上,如果除 $D_1$ 外所有书桌都已满,则放在书架上;
- 从临时存放处取回请求的书籍;
- 最后将其放在 $D_1$ 上。
你的任务是编写一个程序,模拟学生和图书管理员的行为,并计算整个过程的总成本。成本与访问书桌或书架有关,即上述描述中在书桌或书架上放置/取走书籍的行为。访问书桌 $D_i$ 的成本为 $i$,访问书架的成本为 $m + 1$。也就是说,访问 $D_1, \dots, D_m$ 和书架的成本分别为 $1, \dots, m$ 和 $m + 1$。其他操作的成本忽略不计。
最初,书桌上没有书。图书馆开放后不会有新学生出现。
输入格式
输入包含多个数据集。输入的结束由一行包含三个空格分隔的零表示,该行不属于数据集。
每个数据集的格式如下:
$m \ c \ n$ $k_1$ $b_{11} \dots b_{1k_1}$ $.$ $.$ $.$ $k_n$ $b_{n1} \dots b_{nk_n}$
这里,所有数据项均为正整数。$m$ 是书桌的数量,不超过 10。$c$ 是允许放在书桌上的书籍数量,不超过 30。$n$ 是学生人数,不超过 100。$k_i$ 是第 $i$ 位学生请求的书籍数量,不超过 50。$b_{ij}$ 是第 $i$ 位学生在第 $j$ 轮请求的书籍 ID。没有两本书具有相同的 ID。注意,学生可能会多次请求同一本书。$b_{ij}$ 小于 100。
说明
在此处,我们展示上述数据集的成本计算示例:
$3 \ 1 \ 2$ $3$ $60 \ 61 \ 62$ $2$ $70 \ 60$
在这个数据集中,有 3 个书桌($D_1, D_2, D_3$)。每个书桌最多放 1 本书。学生人数为 2。第一位学生请求 3 本书,ID 分别为 60、61 和 62;第二位学生请求 2 本书,ID 分别为 70 和 60。
该数据集的成本计算如下:首先,对于第一位学生的第一个请求,图书管理员从书架上取出 60 号书并将其放在 $D_1$ 上,第一位学生排到队尾,成本为 5。接下来,对于第二位学生的第一个请求,图书管理员从书架上取出 70 号书,将其放在 $D_2$ 上,将 60 号书从 $D_1$ 移至 $D_3$,最后将 70 号书从 $D_2$ 移至 $D_1$,成本为 13。类似地,书籍 61、60 和 62 的成本分别计算为 14、12 和 14。因此,总成本为 58。
输出格式
对于每个数据集,在单独的一行中输出处理所有请求的总成本。
样例
样例输入 1
2 1 1 1 50 2 1 2 1 50 1 60 2 1 2 2 60 61 1 70 4 2 3 3 60 61 62 1 70 2 80 81 3 1 2 3 60 61 62 2 70 60 1 2 5 2 87 95 3 96 71 35 2 68 2 3 3 18 93 2 57 2 2 2 1 5 1 2 1 3 1 0 0 0
样例输出 1
4 16 28 68 58 98 23