在本题中,你需要模拟 $n$ 个服务程序 $P_1, P_2, \dots, P_n$ 的执行过程。每个程序由一系列整数描述:$T, I, in_1, in_2, \dots, in_I, O, out_1, out_2, \dots, out_O$,这意味着它需要 $T$ 个单位时间来执行,需要 $I$ 个输入变量(即 $in_1, in_2, \dots, in_I$),并在运行结束时设置 $O$ 个输出变量(即 $out_1, out_2, \dots, out_O$)。一个程序当且仅当所有这些输入变量都准备好(初始可用,或由其他程序设置)时才能启动。
想象你拥有一台超级计算机,可以根据需要并行执行任意数量的程序,并且每个变量都可以被多个程序同时读取和写入。你的任务是尽快计算出特定的“目标”变量。
假设有 4 个程序,如下表所示:
| 程序编号 | 时间 | 需要 | 产生 |
|---|---|---|---|
| 1 | 2 | $X_1$ | $X_2$ |
| 2 | 3 | $X_1$ | $X_3$ |
| 3 | 4 | $X_2$ | $X_4$ |
| 4 | 1 | $X_3, X_4$ | $X_5$ |
如果初始只有 $X_1$ 可用,则获得 $X_5$ 的最快时间为 7。
你还需要构造一个表达式,展示如何执行这些程序以达到最短时间。该表达式的语法是递归的:
- 单个程序:$P_x$,其中 $1 \le x \le n$(例如 $P_2, P_{499}$ 等)。含义:立即执行该程序。该程序的结束标志着此表达式的结束。
- 串行执行:$(S_1S_2\dots S_k)$,其中每个 $S_i$ 都是一个表达式。注意最外层的括号是强制性的。含义:执行表达式 $S_1$,然后在 $S_1$ 结束后立即执行 $S_2$,在 $S_2$ 结束后立即执行 $S_3$,以此类推,最后在 $S_{k-1}$ 结束后立即执行 $S_k$。表达式 $S_k$ 的结束标志着整个表达式的结束。
- 并行执行:$(S_1|S_2|\dots|S_k)$,其中每个 $S_i$ 都是一个表达式。注意最外层的括号是强制性的。含义:同时执行表达式 $S_1, S_2, \dots, S_k$。最后一个完成的表达式的结束标志着整个表达式的结束。
上述示例的一种可能表达式是 $(((P_1P_3)|P_2)P_4)$。$(P_1P_2P_3P_4)$ 是不可接受的,因为在该表达式中,$X_5$ 在时间 10 才可用,晚于最优时间 7。
输入格式
最多有 100 组测试数据。每组数据以三个整数 $n, m, o$ 开始($1 \le n, m \le 500, 1 \le o \le m$)。程序数量为 $n$,变量数量为 $m$,目标变量为 $X_o$。变量编号为 1 到 $m$,程序编号为 1 到 $n$。下一行包含一个长度为 $m$ 的 01 字符串。如果第 $i$ 个字符为 1,则表示第 $i$ 个变量初始可用。保证目标变量在初始时不可用。接下来的 $n$ 行描述程序。每行以一个整数 $T$($1 \le T \le 100$)开始,表示执行时间,接着是一个整数 $I$,随后是 $I$ 个整数 $in_1, in_2, \dots, in_I$,如上所述,然后是一个整数 $O$,随后是 $O$ 个整数 $out_1, out_2, \dots, out_O$。$1 \le in_i, out_i \le m, 1 \le I, O \le 10$。最后一组测试数据后跟随 $n=m=o=0$,该行不应被处理。
输出格式
对于每组测试数据,打印案例编号和获得目标变量所需的总时间。如果无法获得目标变量,则打印 -1。
如果可以获得目标变量,则在同一行打印表达式。请确保打印一个有效的表达式,长度最多为 10,000 个字符,且每个程序最多打印一次。表达式内不应包含任何空格字符。
为了简化问题,允许某些程序在最优时间之后完成,只要目标变量在最优时间可用即可。你也可以打印冗余的括号(但要注意表达式长度)。如果不存在这样的表达式,则打印 "Can't do in serial-parallel.",不带引号。
在每组测试数据的输出后打印一个空行。
样例
输入 1
4 5 5 10000 2 1 1 1 2 3 1 1 1 3 4 1 2 1 4 1 2 3 4 1 5 1 2 1 01 31 1 2 1 1 3 5 5 10100 3 1 1 1 2 1 1 3 1 4 3 2 4 2 1 5 1 3 3 100 1 1 1 1 2 0 0 0
输出 1
Case 1: 7 (((P1P3)|P2)P4) Case 2: 31 P1 Case 3: 6 ((P1P3)|P2) Case 4: -1
说明
变量被设置后,它将永远保持可用。这就是为什么在第三个示例中 $P_3$ 可以被执行。
还要注意,第一个示例还有其他正确的表达式,例如 $((P_1P_3P_4)|P_2)$。你甚至可以打印 $(((P_1P_3)P_4)|P_2)$ 或 $((P_1(P_3P_4))|P_2)$。在本题中,它们中的任何一个都是可接受的。