根据一组距离重建凸多边形

Python Hard math

任务 «根据一组距离重建凸多边形»

给定平面上 N 个点构成的集合,这些点按遍历顺序形成一个凸多边形。已知所有顶点之间的两两距离,但点的顺序未知。需要恢复顶点的原始顺序(编号从 1 到 N),使得得到的多边形是凸的,并且具有相同的两两距离。保证解是唯一的。请按顺时针顺序输出顶点的编号,从编号最小的顶点开始。

输入格式

第一行包含一个整数 N (3 ≤ N ≤ 100)。接下来的 N 行每行包含 N 个整数——距离矩阵 A,其中 A[i][j] = A[j][i] 是第 i 个顶点与第 j 个顶点之间欧几里得距离的平方 (0 ≤ A[i][j] ≤ 10^9)。对角线元素为 0。矩阵是对称的。

输出格式

输出 N 个数——按顺时针遍历的顶点编号,从最小编号开始。如果无法恢复多边形,则输出 -1。

示例

示例 1

输入
4 0 1 4 1 1 0 1 4 4 1 0 1 1 4 1 0
输出
1 2 3 4

示例 2

输入
5 0 2 5 5 2 2 0 2 5 5 5 2 0 2 5 5 5 2 0 2 2 5 5 2 0
输出
1 2 3 4 5

示例 3

输入
5 1 2 3 4 5 5 3 4 5 6 7
输出
main.py