Reconstrução de um polígono convexo a partir de um conjunto de distâncias

Python Hard math

Tarefa «Reconstrução de um polígono convexo a partir de um conjunto de distâncias»

Dado um conjunto de N pontos no plano, formando um polígono convexo na ordem de percurso. Todas as distâncias aos pares entre os vértices são conhecidas, mas a ordem dos pontos é desconhecida. É necessário reconstruir a ordem original dos vértices (seus números de 1 a N) de modo que o polígono resultante seja convexo e tenha as mesmas distâncias aos pares. Garante-se que a solução é única. Imprima os números dos vértices na ordem de percurso no sentido horário, começando pelo vértice de menor número.

Formato de Entrada

A primeira linha contém um inteiro N (3 ≤ N ≤ 100). As próximas N linhas contêm N inteiros cada — a matriz de distâncias A, onde A[i][j] = A[j][i] é o quadrado da distância euclidiana entre o i-ésimo e o j-ésimo vértice (0 ≤ A[i][j] ≤ 10^9). Os elementos da diagonal são 0. A matriz é simétrica.

Formato de Saída

Imprima N números — os números dos vértices na ordem de percurso no sentido horário, começando pelo menor número. Se for impossível reconstruir o polígono, imprima -1.

Exemplos

Exemplo 1

ENTRADA
4 0 1 4 1 1 0 1 4 4 1 0 1 1 4 1 0
SAÍDA
1 2 3 4

Exemplo 2

ENTRADA
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
SAÍDA
1 2 3 4 5

Exemplo 3

ENTRADA
5 1 2 3 4 5 5 3 4 5 6 7
SAÍDA
main.py