Google Code Jam 总决赛的时间到了,我们都想去现场!不幸的是,我们中有几个人不小心去了山景城,而不是正确的目的地:英国伦敦。但别担心——我们可以乘坐从山景城到伦敦的免费 Google 班车服务!
班车服务由 $M$ 条连接城市对的单向路线组成。对于每一条路线,你知道它从哪个城市出发并到达哪个城市,但不幸的是,你不知道这些路线的具体长度。相反,对于每一条路线,你只知道它的长度可以是 $a_i$ 到 $b_i$ 之间的任意整数(包含边界)。
我以前多次乘坐过 Google 班车,所以我建议了一条从山景城到伦敦的路线。但你担心我的寻路技巧不如你,你想检查一下我的工作。
给定我建议的路径,它有可能是从山景城到伦敦的最短路径吗?如果不是,我路径中第一条绝对不属于任何最短路径的班车路线的 ID 是多少(假设之前的所有班车路线都已按照我建议的路径乘坐)?
例如,假设我们有以下班车路线列表:
| ID | 起点城市 | 终点城市 | 班车长度 |
|---|---|---|---|
| 1 | Mountain View | London | $[100, 1000]$ |
| 2 | Mountain View | Paris | $[500, 5000]$ |
| 3 | Paris | London | $[400, 600]$ |
| 4 | Paris | Moscow | $[500, 5000]$ |
| 5 | Moscow | London | $[1, 10000]$ |
我建议的路径是 Mountain View -> Paris -> Moscow -> London。真正的最短路径可能是从 Mountain View 到 London 的直达路线,或者是 Mountain View -> Paris -> London 的路径。这意味着我路径中的第二条路线(Paris -> Moscow)是第一条绝对不属于任何最短路径的路线。
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含三个正整数 $N$、$M$ 和 $P$。$N$ 表示城市总数(城市编号从 1 到 $N$),$M$ 表示班车路线总数,$P$ 表示我从山景城(城市 #1)到伦敦(城市 #2)的路径中的班车路线数量。
接下来是 $M$ 行,每行包含四个整数 $u_i, v_i, a_i, b_i$。每一行表示有一条从城市 $u_i$ 到城市 $v_i$ 的单向班车路线,且已知其长度可以是 $a_i$ 到 $b_i$ 之间的任意整数(包含边界)。路线按照输入顺序被赋予从 1 到 $M$ 的 ID。
最后一行包含 $P$ 个唯一的整数,范围在 1 到 $M$ 之间。这些整数按顺序表示我带你乘坐的班车路线。每一个都是前述列表中某条路线的 ID。
输出格式
对于每个测试用例,输出一行 "Case #x: n",其中 $x$ 是用例编号(从 1 开始),$n$ 是我路径中第一条不可能成为从山景城到伦敦的最短路径一部分的班车路线的 ID。如果没有这样的路线,则输出 "Looks Good To Me"。
数据范围
$1 \le T \le 10$。 $1 \le u_i, v_i \le N$。 $1 \le a_i \le b_i \le 1000000$。
保证我建议的路径是从山景城(城市 #1)到伦敦(城市 #2)的有效路径。
同一两个城市之间可能有多条班车路线,也可能存在从一个城市到它自身的班车路线。此外,建议的路径可能会多次访问同一个城市,但不会重复使用同一条班车路线。
子任务 1
$2 \le N \le 20$。 $1 \le M \le 20$。 $1 \le P \le 10$。
子任务 2
$2 \le N \le 1000$。 $1 \le M \le 2000$。 $1 \le P \le 500$。
样例
输入格式 1
3 4 5 3 1 2 100 1000 1 3 500 5000 3 2 400 600 3 4 500 5000 4 2 1 10000 2 4 5 3 3 2 1 3 1 1 3 2 1 1 1 2 1 2 1 2 5 6 3 1 3 1 1 4 2 1 9 1 4 1 1 3 5 2 2 5 2 2 2 3 4 1 2 1 6 2
输出格式 1
Case #1: 4 Case #2: Looks Good To Me Case #3: 6