你最近买了一个漂亮的农场,并想在它周围建一道栅栏。你的农场里已经有了 $N$ 个栅栏桩。
你将通过连接栅栏桩的直线段来建造栅栏。不幸的是,由于一些你不太理解的原因,你的律师坚持要求你必须使用所有的栅栏桩,否则后果会很严重。
在这个问题中,栅栏桩被表示为二维平面上的点。你希望通过对这些桩进行排序,然后依次连接第一个与第二个、第二个与第三个,最后连接最后一个与第一个来建造栅栏。你所创建的栅栏段应该构成一个没有自交的多边形。也就是说,在每个栅栏桩处只有两条栅栏段,而在其他任何点上最多只有一条栅栏段。
这听起来很简单,但你实际上还希望保持你的农场足够大!把大部分农场围起来并没有什么意思。因此,你希望以这样一种方式建造栅栏:所围成的面积要大于如果你被允许不必使用所有桩时所能围成的最大面积的一半。
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含桩的数量 $N$。桩的编号从 $0$ 到 $N - 1$。接下来的 $N$ 行,每行包含两个整数 $X_i$ 和 $Y_i$,中间用空格分隔,表示第 $i$ 个桩的坐标。
输出格式
对于每个测试用例,输出一行,包含 "Case #x: ",其中 $x$ 是测试用例编号(从 1 开始),后跟 $N$ 个从 $0$ 到 $N - 1$ 的不同整数,用空格分隔。这些数字表示你用来建造栅栏的桩的编号,按顺时针或逆时针顺序排列。注意,第一个和最后一个桩是相连的。
如果有多种解,输出其中任意一个即可。
数据范围
内存限制:1GB。
所有桩位于 $N$ 个不同的点上,且不会全部共线。
小数据集(测试集 1 - 可见;9 分)
时间限制:6 秒。
$1 \le T \le 100$
$3 \le N \le 10$
$-100 \le X_i, Y_i \le 100$
大数据集(测试集 2 - 隐藏;13 分)
时间限制:12 秒。
$1 \le T \le 30$
$3 \le N \le 1000$
$-50000 \le X_i, Y_i \le 50000$
样例
样例输入 1
3 4 1 2 2 0 0 0 1 1 5 0 0 1 1 2 2 0 2 2 0 3 0 0 1 0 0 1
样例输出 1
Case #1: 0 1 2 3 Case #2: 0 1 4 2 3 Case #3: 0 2 1
说明
在第一个测试用例中,我们可以构建三个多边形,其中两个的面积足够大——即由序列 0 1 2 3 和 0 2 1 3 所描述的多边形。由 0 1 3 2 描述的多边形面积太小。在第二个测试用例中,我们必须确保多边形不自交,因此,例如 0 1 2 3 4 或 0 1 3 4 2 都是不合法的。在第三个测试用例中,任何顺序描述的都是同一个三角形,因此都是合法的。