Trouver le plus court chemin reliant tous les noeuds d'un graphe

Fermé
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 - 21 nov. 2020 à 16:03
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 29 nov. 2020 à 12:51
Bonjour à tous,
Je suis débutant en python et j'aimerai solliciter votre aide.
Pouvez-vous s'il vous plaît m'aider à comprendre ce que fait ce code python ligne par ligne(en le commentant par exemple)
def permutliste(seq):
"""Retourne la liste de toutes les permutations de la liste seq, qui est une suite de chiffre, mais sans les permutations symétriques ex: si on a [1,2,3] il ne donnera pas [3,2,1]
"""
p = [seq]
n = len(seq)
for k in range(0,n-1):
for i in range(0, len(p)):
z = p[i][:]
for c in range(0,n-k-1):
z.append(z.pop(k))
if (z not in p) and (z[::-1] not in p):
p.append(z[:])
return p

"""autre manière de coder les permutations : recursive"""
def permutation(seq):
n=len(seq)
if n==1:
return [seq]
else :
P=[]
for i in range(n):
A=seq[0:i]+seq[i+1:n]
P1=permutation(A)
for k in range(len(P1)):
P.append([seq[i]]+P1[k])

return P

def permieux(seq):
P = permutation(seq)
for comb in P:
if (comb[::-1] in P):
P.remove(comb[::-1])
return P

"""va tester la longueur de tous les chemins possibles et rendre le chemin pour laquelle elle est min, tous les chemins possibles sont matérialisés par toutes les permutations possibles,, on a enlever les symetries car faire le chemin dans un sens ou dans l'autre c'est la même chose"""


def pluscourtchemin(grap):
l = len(grap[0][:])
seq=[1]
while len(seq) <= l-1:
k = len(seq)
seq.append(k+1)
perm = permieux(seq)
long=0.0
res=[]
for elem in perm:
dist=0.0
for s in range(0,l-1):
x=min(elem[s],elem[s+1])
y=max(elem[s],elem[s+1])
dist = dist + grap[x-1][y-x]
if dist <= long or long==0:
long = dist
res = elem
return(res,long)



"""exemple de graphique à tester"""
gr=[[0, 2, 3, 4], [0, 8, 9], [0, 18]]

"""pour le comprendre : une liste par point : le point A (ou 1) est à une distance 0 de A, 2 de B, 3 de C et 4 de D / le point B est à une distance 0 de B, 8 de C et 9 de D...."""

print()
print(pluscourtchemin(gr))

# Autres exemples de graphes à tester
# grap=[[0, 1, 7.2, 4.1, 8, 12], [0, 3, 9, 6, 2], [0, 7, 11, 3], [0, 5, 5.2], [0, 8.1]]
# graphique= [[0,3,5,7,4,8,9,6],[0,4,8,6,9,5,7],[0,5,8,6,9,7],[0,6,7,9,8],[0,9,7,8],[0,8,9],[0,8]]
# graphique2= [[0,3,5,7,4,8,9],[0,3,5,7,4,8,],[0,4,8,5,7],[0,5,8,7],[0,6,7],[0,9]]
Je vous remercie d'avance,




Configuration: Windows / Chrome 87.0.4280.66

13 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
21 nov. 2020 à 16:05
Bonjour Jerry,

L'indentation étant importante en Python, merci de re poster ton code avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci :

def test():
    print('test')

test()
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
21 nov. 2020 à 16:24
Bonjour,

Merci pour votre retour. Je vous remet le code avec les indentations respectées.
def permutliste(seq):
    """Retourne la liste de toutes les permutations de la liste seq, qui est une suite de chiffre, mais sans les permutations symétriques ex: si on a [1,2,3] il ne donnera pas [3,2,1]
    """
    p = [seq]
    n = len(seq)
    for k in range(0,n-1):
        for i in range(0, len(p)):
            z = p[i][:]
            for c in range(0,n-k-1):
                z.append(z.pop(k))
                if (z not in p) and (z[::-1] not in p):
                    p.append(z[:])
    return p
    
"""autre manière de coder les permutations : recursive"""
def permutation(seq):
    n=len(seq)
    if n==1:
        return [seq]
    else :
        P=[]
        for i in range(n):
            A=seq[0:i]+seq[i+1:n]
            P1=permutation(A)
            for k in range(len(P1)):
                P.append([seq[i]]+P1[k])
                
    return P

def permieux(seq):
    P = permutation(seq)
    for comb in P:
        if (comb[::-1] in P):
            P.remove(comb[::-1])
    return P

"""va tester la longueur de tous les chemins possibles et rendre le chemin pour laquelle elle est min, tous les chemins possibles sont matérialisés par toutes les permutations possibles,, on a enlever les symetries car faire le chemin dans un sens ou dans l'autre c'est la même chose"""  

  
def pluscourtchemin(grap):
    l = len(grap[0][:]) 
    seq=[1]
    while len(seq) <= l-1:
        k = len(seq)
        seq.append(k+1) 
    perm = permieux(seq) 
    long=0.0 
    res=[] 
    for elem in perm: 
        dist=0.0
        for s in range(0,l-1):
            x=min(elem[s],elem[s+1])
            y=max(elem[s],elem[s+1])
            dist = dist + grap[x-1][y-x]
        if dist <= long or long==0:
            long = dist
            res = elem
    return(res,long)
        
        
    
"""exemple de graphique à tester"""
gr=[[0, 2, 3, 4], [0, 8, 9], [0, 18]]

"""pour le comprendre : une liste par point : le point A (ou 1) est à une distance 0 de A, 2 de B, 3 de C et 4 de D / le point B est à une distance 0 de B, 8 de C et 9 de D...."""

print()
print(pluscourtchemin(gr))


# Autres exemples de graphes à tester
# grap=[[0, 1, 7.2, 4.1, 8, 12], [0, 3, 9, 6, 2], [0, 7, 11, 3], [0, 5, 5.2], [0, 8.1]]
# graphique= [[0,3,5,7,4,8,9,6],[0,4,8,6,9,5,7],[0,5,8,6,9,7],[0,6,7,9,8],[0,9,7,8],[0,8,9],[0,8]]
# graphique2= [[0,3,5,7,4,8,9],[0,3,5,7,4,8,],[0,4,8,5,7],[0,5,8,7],[0,6,7],[0,9]]
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
21 nov. 2020 à 17:11
Déjà la fonction permutliste(seq) est inutile: elle n'est pas appelée dans ce programme

Ensuite le programme affiche le plus court chemin d'un graphe (et non d'un graphique)

avec la distance : ([3, 2, 1, 4], 14.0)
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
21 nov. 2020 à 17:23
Merci beaucoup! Oui c'est une faute de frappe on cherche justement le plus court chemin d'un graphe. Pouvez-vous s'il vous plaît m'aider à commenter ce code pour que je puisse comprendre chaque fonction( chaque ça serait encore mieux), je sais que c'est trop vous demander mais je vous remercie d'avance . Aussi les autres personnes qui lisent ce poste et qui peuvent m'aider, svp je demande votre aide.

Merci d'avance!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
21 nov. 2020 à 17:28
Tiens, déjà, j'ai fait des modifs pour éclaircir un peu:

suppression de la fonction inutile
placement des docs de fonction à l'intérieur des fonctions (c'est logique)
aération du code
affichage plus sympa

# -*- coding:Latin-1 -*-

def permutation(seq):
    """ coder recursivement les permutations """

    n=len(seq)

    if n==1:
        return [seq]
    else :
        P=[]
        for i in range(n):
            A=seq[0:i]+seq[i+1:n]
            P1=permutation(A)
            for k in range(len(P1)):
                P.append([seq[i]]+P1[k])
                
    return P

def permieux(seq):

    P = permutation(seq)

    for comb in P:
        if (comb[::-1] in P):
            P.remove(comb[::-1])

    return P

def plus_court_chemin(graphe):
    """ teste la longueur de tous les chemins possibles et rend le chemin pour laquelle elle est min,
       tous les chemins possibles sont matérialisés par toutes les permutations possibles,
       on a enlevé les symetries car faire le chemin dans un sens ou dans l'autre c'est la même chose """

    l_graphe = len(graphe[0][:]) 
    seq=[1]

    while len(seq) <= l_graphe - 1:
        k = len(seq)
        seq.append(k+1)

    perm = permieux(seq) 
    longueur=0.0 
    res=[]

    for elem in perm: 
        dist=0.0

        for s in range(0,l_graphe - 1):
            x=min(elem[s],elem[s+1])
            y=max(elem[s],elem[s+1])
            dist = dist + graphe[x-1][y-x]

        if dist <= longueur or longueur==0:
            longueur = dist
            res = elem

    return(res,longueur)

"""exemple de graphe à tester
une liste par point : le point A (ou 1) est à une distance 0 de A,
2 de B, 3 de C et 4 de D / le point B est à une distance 0 de B, 8 de C et 9 de D... """
gr=[[0, 2, 3, 4], [0, 8, 9], [0, 18]]

resultat = plus_court_chemin(gr)
chemin, distance = resultat[0], resultat[1]
print('\nLe plus court chemin : {}, distance : {}'.format(chemin, distance))
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
21 nov. 2020 à 18:03
Merci beaucoup pour votre contribution Phil_1857. Toutefois, mais j'ai encore du mal à comprendre par exemple(et pas que) ce que fait la boucle for dans permutation() ou dans permieux()( Je suis débutant en python et c'est super important que je comprenne le code). Pouvez-vous svp si ce n'est trop vous demandez me faire un commentaire ligne par ligne bien sûr quand cela reste possible pour vous.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
21 nov. 2020 à 18:25
La fonction permutation trouve toutes les combinaisons possibles de la liste seq passée en argument:

seq = [1,2,3,4]
combinaisons: [1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], etc ...

permieux enlève les symétries comme [2, 3, 4, 1] qui est le même chemin que [1,4,3,2], mais dans l'autre sens

Après, pour savoir comment ça marche, il faut mettre des print() dans les fonctions pour connaitre le contenu des variables à chaque étape ...
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 15:41
Bonjour Phil,

Tu peux stp ici me donner un exemple de comment mettre un print dans une fonction pour voir comment ça marche?
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178 > Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 15:53
Bonjour Jerry,

un exemple:

def test():
    print('test')

test()
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 22 nov. 2020 à 11:16
Bonjour Jerry,

Il y a un problème avec ton graphe gr=[[0, 2, 3, 4], [0, 8, 9], [0, 18]]

D'après les explications A est a 0 de A, 2 de B, 3 de C, etc ...

B est a 8 de C

Dans la 3eme liste, C est à 0 de C et 18 de B

Etonnant, non ? ou bien j'interprète mal le commentaire ...

Un affichage plus sympa:
chemin, distance = plus_court_chemin(gr)
print('\nLe plus court chemin :')
for el in chemin:
	print(chr(65+el-1),end = ' ')
print('\ndistance : {}'.format(distance))
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
23 nov. 2020 à 09:28
Bonjour Phil_1857 je confirme qu'il y a un problème aussi, mais je sais pas pourquoi.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
22 nov. 2020 à 22:57
bonjour à tous,
merci de tenir compte de ceci:
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
résoudre un exercice à la place de l'étudiant ne va pas lui permettre d'apprendre et de progresser.
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
23 nov. 2020 à 09:29
Bonjour yg_be, il ne s'agit pas de résoudre un problème à ma place mais j'ai juste demandé de l'aide parce que je ne comprend pas. Merci
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
23 nov. 2020 à 10:00
Bonjour yg_be,

Tu as raison

Mais pour l'instant, on n'a pas donné de réponse toute faite à sa question, qui était de lui commenter le code ligne par ligne

Je lui ai juste redonné son code dans une forme plus sympa, mais c'est tout ...
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 16:42
Bonjour Phil,

J'aimerai juste cette fois que tu m'assures sur ce que je pense de cette boucle for qui est dans distance_euclidienne(),

def distance_euclidienne_carree(villes):
    """
    Calcule la distance euclidienne entre deux points.
    """
    liste_distances = []
    for i in range(len(villes)):
        liste_distances.append([])
        for j in range(i):
            liste_distances[i].append(liste_distances[j][i])
        liste_distances[i].append(np.inf)
        for j in range(i+1, len(villes)):
            liste_distances[i].append(math.sqrt( ((villes[i][0]-villes[j][0])**2) + ((villes[i][1]-villes[j][1])**2) ))
    distances = np.array(liste_distances)
    return distances
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 16:48
On commence à créer une liste vide, et puis dans la boucle for à la ligne qui suit on a que:
pour chaque i variant de 0 à len(villes)-1:
on ajoute une liste vide et puis pour chaque j variant de 0 à i-1 on ajoute dans la liste liste_distances au ième indice le jième et le ième indice de liste_distances, est ce que c'est bien ça?

Et puis par après je ne comprend pas plus bien suite?

Merci d'avance pour ton aide
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 > Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 17:02
Et puis la suite j'ai l'impression qu'on modifie la liste(on a une liste de listes) et on ajoute le jième indice de la ième liste mais stp Phil_1857 dis moi si ce que je dis est vrai et aide moi à comprendre stp la suite.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 17:16
tu as intérêt à inclure les numéros de ligne dans ta description.
à ta place, je décrirais aussi que contiennent les variables, cela donnera du sens. cela te permettra de comprendre et d'expliquer.
sais-tu ce qu'est
np.inf
?
je recommande d'exécuter le code et d'observer son comportement.
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 17:24
J'ai exécuté le code, et je posais la question pour être sûr que ce que je pense est vrai.

np.inf vient au fait de la construction de la classe ant_colony.py qui est d'ailleurs appelé dans mon programme: au départ il n'y a pas de chemin le plus court, donc la plus courte longueur pour passer par tous les noeuds est + infini
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2020 à 17:38
peux-tu montrer comment tu as exécuté le code?
as-tu ajouté des print pour comprendre ce qu'il faisait? ce n'est qu'après avoir compris ce qui se passait que tu pourras comprendre la syntaxe.

utilise les n° de ligne du code quand tu expliques ou que tu demandes.
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 17:48
Le code complet est ainsi

import numpy as np
import random
import math
import functools

from ant_colony_commente import AntColony

def construit_ville(n, x=1000, y=700):
    """
    Tire aléatoirement *n* villes dans un carré ``x * y``,
    on choisit ces villes de sorte quelles ne soient pas trop proches.
    """
    #deux villes ne pourront pas être plus proches que mind
    mind = math.sqrt(x * x + y * y) / (n * 0.75)
    # liste vide
    lt = []
    while n > 0:
        #on tire aléatoirement les coordonnées d'une ville
        xx = x * random.random()
        yy = y * random.random()
        #on vérifie qu'elle n'est pas trop proche d'aucune autre ville
        ajout = True
        for t in lt:
            d1 = t[0] - xx
            d2 = t[1] - yy
            d = math.sqrt(d1 * d1 + d2 * d2)
            if d < mind:
                ajout = False  # ville trop proche
        #si la ville n'est pas trop proche des autres, on l'ajoute à la liste
        if ajout:
            lt.append((xx, yy))
            n = n - 1  # une ville en moins à choisir
    return lt



def distance_euclidienne_carree(villes):
    """
    Calcule la distance euclidienne entre deux points.
    """
    liste_distances = []
    for i in range(len(villes)):
        liste_distances.append([])
        for j in range(i):
            liste_distances[i].append(liste_distances[j][i])
        liste_distances[i].append(np.inf)
        for j in range(i+1, len(villes)):
            liste_distances[i].append(math.sqrt( ((villes[i][0]-villes[j][0])**2) + ((villes[i][1]-villes[j][1])**2) ))
    distances = np.array(liste_distances)
    return distances

villes = construit_ville(100)
distances = distance_euclidienne_carree(villes)

ant_colony = AntColony(distances, 10, 2, 100, 0.95, alpha=1, beta=1)
shortest_path = ant_colony.run()
print("shortest_path : {}".format(shortest_path))


Du coup plus en bas ,vous voyez comment j'éxecute le programme en utilisant construit_ville() mais cela ne me permet pas de comprendre bien la boucle for qui est dans distances_euclidienne_carre()
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 17:51
et voilà mes résultats
([(0, 63), (63, 19), (19, 57), (57, 7), (7, 1), (1, 69), (69, 44), (44, 43), (43, 24), (24, 16), (16, 15), (15, 14), (14, 55), (55, 78), (78, 18), (18, 47), (47, 50), (50, 58), (58, 20), (20, 99), (99, 72), (72, 88), (88, 92), (92, 42), (42, 66), (66, 77), (77, 23), (23, 26), (26, 28), (28, 45), (45, 5), (5, 90), (90, 6), (6, 32), (32, 73), (73, 8), (8, 89), (89, 12), (12, 65), (65, 97), (97, 80), (80, 83), (83, 4), (4, 70), (70, 37), (37, 9), (9, 62), (62, 22), (22, 38), (38, 29), (29, 84), (84, 48), (48, 75), (75, 11), (11, 71), (71, 82), (82, 41), (41, 86), (86, 76), (76, 79), (79, 56), (56, 96), (96, 59), (59, 61), (61, 64), (64, 39), (39, 17), (17, 49), (49, 13), (13, 98), (98, 52), (52, 53), (53, 3), (3, 10), (10, 67), (67, 36), (36, 68), (68, 31), (31, 30), (30, 74), (74, 46), (46, 81), (81, 54), (54, 2), (2, 60), (60, 95), (95, 27), (27, 91), (91, 33), (33, 85), (85, 87), (87, 40), (40, 35), (35, 93), (93, 34), (34, 21), (21, 25), (25, 94), (94, 51), (51, 0)], 29608.45482304423)
([(0, 63), (63, 52), (52, 67), (67, 4), (4, 53), (53, 89), (89, 16), (16, 73), (73, 35), (35, 28), (28, 42), (42, 22), (22, 19), (19, 47), (47, 23), (23, 70), (70, 75), (75, 24), (24, 21), (21, 25), (25, 76), (76, 27), (27, 99), (99, 48), (48, 85), (85, 92), (92, 46), (46, 79), (79, 14), (14, 84), (84, 62), (62, 40), (40, 64), (64, 51), (51, 13), (13, 74), (74, 26), (26, 54), (54, 38), (38, 33), (33, 59), (59, 8), (8, 20), (20, 93), (93, 81), (81, 96), (96, 39), (39, 17), (17, 2), (2, 80), (80, 18), (18, 69), (69, 83), (83, 98), (98, 91), (91, 56), (56, 49), (49, 87), (87, 94), (94, 10), (10, 66), (66, 36), (36, 86), (86, 43), (43, 90), (90, 31), (31, 30), (30, 5), (5, 88), (88, 15), (15, 77), (77, 11), (11, 65), (65, 60), (60, 9), (9, 37), (37, 41), (41, 7), (7, 57), (57, 44), (44, 12), (12, 68), (68, 72), (72, 61), (61, 55), (55, 78), (78, 97), (97, 71), (71, 50), (50, 29), (29, 45), (45, 1), (1, 95), (95, 58), (58, 6), (6, 34), (34, 32), (32, 3), (3, 82), (82, 0)], 29013.25502059616)
([(0, 79), (79, 52), (52, 22), (22, 76), (76, 85), (85, 2), (2, 11), (11, 49), (49, 19), (19, 45), (45, 98), (98, 90), (90, 1), (1, 75), (75, 81), (81, 13), (13, 3), (3, 14), (14, 8), (8, 91), (91, 84), (84, 62), (62, 57), (57, 7), (7, 37), (37, 69), (69, 21), (21, 42), (42, 9), (9, 38), (38, 5), (5, 82), (82, 65), (65, 29), (29, 15), (15, 78), (78, 67), (67, 23), (23, 89), (89, 32), (32, 73), (73, 86), (86, 95), (95, 4), (4, 47), (47, 94), (94, 51), (51, 92), (92, 58), (58, 55), (55, 80), (80, 34), (34, 33), (33, 63), (63, 97), (97, 71), (71, 48), (48, 74), (74, 26), (26, 18), (18, 50), (50, 93), (93, 96), (96, 17), (17, 56), (56, 72), (72, 60), (60, 24), (24, 10), (10, 41), (41, 35), (35, 30), (30, 6), (6, 36), (36, 28), (28, 70), (70, 27), (27, 87), (87, 16), (16, 39), (39, 64), (64, 54), (54, 61), (61, 83), (83, 77), (77, 99), (99, 20), (20, 68), (68, 59), (59, 53), (53, 66), (66, 40), (40, 31), (31, 25), (25, 44), (44, 43), (43, 46), (46, 12), (12, 88), (88, 0)], 27169.973885680334)
([(0, 63), (63, 95), (95, 62), (62, 26), (26, 76), (76, 18), (18, 55), (55, 78), (78, 51), (51, 90), (90, 75), (75, 88), (88, 97), (97, 24), (24, 71), (71, 34), (34, 22), (22, 82), (82, 83), (83, 32), (32, 73), (73, 14), (14, 77), (77, 84), (84, 20), (20, 40), (40, 93), (93, 3), (3, 67), (67, 4), (4, 7), (7, 57), (57, 10), (10, 16), (16, 99), (99, 79), (79, 33), (33, 68), (68, 64), (64, 19), (19, 39), (39, 17), (17, 1), (1, 81), (81, 12), (12, 25), (25, 43), (43, 44), (44, 89), (89, 6), (6, 5), (5, 31), (31, 30), (30, 38), (38, 29), (29, 65), (65, 27), (27, 91), (91, 13), (13, 98), (98, 37), (37, 23), (23, 41), (41, 86), (86, 92), (92, 46), (46, 87), (87, 94), (94, 54), (54, 49), (49, 56), (56, 96), (96, 80), (80, 50), (50, 52), (52, 58), (58, 42), (42, 21), (21, 69), (69, 70), (70, 48), (48, 36), (36, 66), (66, 45), (45, 28), (28, 2), (2, 8), (8, 59), (59, 53), (53, 47), (47, 11), (11, 35), (35, 72), (72, 61), (61, 85), (85, 74), (74, 60), (60, 15), (15, 9), (9, 0)], 26520.965973657647)
([(0, 63), (63, 59), (59, 76), (76, 37), (37, 95), (95, 45), (45, 90), (90, 1), (1, 34), (34, 92), (92, 10), (10, 57), (57, 70), (70, 86), (86, 75), (75, 77), (77, 39), (39, 17), (17, 14), (14, 81), (81, 54), (54, 49), (49, 89), (89, 32), (32, 85), (85, 26), (26, 27), (27, 88), (88, 94), (94, 31), (31, 30), (30, 29), (29, 35), (35, 65), (65, 22), (22, 42), (42, 21), (21, 78), (78, 18), (18, 99), (99, 38), (38, 19), (19, 64), (64, 72), (72, 61), (61, 73), (73, 16), (16, 79), (79, 8), (8, 87), (87, 84), (84, 47), (47, 48), (48, 46), (46, 74), (74, 67), (67, 4), (4, 51), (51, 25), (25, 52), (52, 62), (62, 7), (7, 9), (9, 6), (6, 5), (5, 3), (3, 60), (60, 91), (91, 96), (96, 83), (83, 50), (50, 97), (97, 24), (24, 66), (66, 41), (41, 80), (80, 55), (55, 23), (23, 98), (98, 44), (44, 43), (43, 40), (40, 82), (82, 15), (15, 20), (20, 93), (93, 33), (33, 56), (56, 2), (2, 11), (11, 58), (58, 69), (69, 36), (36, 28), (28, 13), (13, 12), (12, 68), (68, 71), (71, 53), (53, 0)], 25247.676508791472)
([(0, 63), (63, 91), (91, 16), (16, 73), (73, 41), (41, 55), (55, 11), (11, 35), (35, 40), (40, 39), (39, 17), (17, 20), (20, 19), (19, 23), (23, 53), (53, 52), (52, 30), (30, 44), (44, 1), (1, 9), (9, 43), (43, 31), (31, 33), (33, 98), (98, 96), (96, 89), (89, 32), (32, 77), (77, 82), (82, 65), (65, 18), (18, 21), (21, 42), (42, 88), (88, 92), (92, 78), (78, 54), (54, 76), (76, 24), (24, 71), (71, 49), (49, 56), (56, 85), (85, 14), (14, 7), (7, 10), (10, 37), (37, 51), (51, 86), (86, 48), (48, 75), (75, 83), (83, 97), (97, 67), (67, 4), (4, 50), (50, 95), (95, 57), (57, 99), (99, 3), (3, 2), (2, 15), (15, 60), (60, 22), (22, 74), (74, 26), (26, 27), (27, 70), (70, 13), (13, 6), (6, 45), (45, 62), (62, 34), (34, 87), (87, 94), (94, 84), (84, 8), (8, 46), (46, 28), (28, 69), (69, 66), (66, 29), (29, 61), (61, 64), (64, 72), (72, 93), (93, 81), (81, 47), (47, 59), (59, 68), (68, 12), (12, 79), (79, 38), (38, 80), (80, 90), (90, 5), (5, 58), (58, 36), (36, 25), (25, 0)], 26181.608386299526)
([(0, 63), (63, 16), (16, 99), (99, 79), (79, 8), (8, 52), (52, 51), (51, 92), (92, 78), (78, 18), (18, 46), (46, 74), (74, 26), (26, 37), (37, 62), (62, 95), (95, 58), (58, 6), (6, 1), (1, 15), (15, 82), (82, 48), (48, 75), (75, 50), (50, 29), (29, 84), (84, 91), (91, 28), (28, 31), (31, 30), (30, 44), (44, 43), (43, 59), (59, 89), (89, 32), (32, 45), (45, 98), (98, 25), (25, 81), (81, 54), (54, 27), (27, 61), (61, 14), (14, 69), (69, 21), (21, 42), (42, 41), (41, 60), (60, 97), (97, 83), (83, 67), (67, 4), (4, 7), (7, 86), (86, 5), (5, 90), (90, 9), (9, 57), (57, 23), (23, 47), (47, 35), (35, 2), (2, 11), (11, 12), (12, 3), (3, 40), (40, 33), (33, 19), (19, 56), (56, 96), (96, 17), (17, 49), (49, 53), (53, 87), (87, 77), (77, 85), (85, 38), (38, 64), (64, 39), (39, 72), (72, 93), (93, 20), (20, 73), (73, 70), (70, 66), (66, 65), (65, 24), (24, 71), (71, 68), (68, 22), (22, 34), (34, 76), (76, 55), (55, 80), (80, 36), (36, 88), (88, 94), (94, 13), (13, 10), (10, 0)], 24068.170353420646)
([(0, 63), (63, 10), (10, 15), (15, 65), (65, 49), (49, 99), (99, 39), (39, 17), (17, 53), (53, 78), (78, 18), (18, 52), (52, 50), (50, 80), (80, 13), (13, 12), (12, 27), (27, 4), (4, 34), (34, 69), (69, 21), (21, 42), (42, 37), (37, 95), (95, 5), (5, 1), (1, 32), (32, 89), (89, 26), (26, 74), (74, 58), (58, 51), (51, 86), (86, 47), (47, 92), (92, 57), (57, 7), (7, 85), (85, 93), (93, 64), (64, 72), (72, 61), (61, 68), (68, 59), (59, 8), (8, 19), (19, 33), (33, 46), (46, 87), (87, 43), (43, 31), (31, 30), (30, 44), (44, 25), (25, 94), (94, 90), (90, 6), (6, 36), (36, 75), (75, 28), (28, 45), (45, 98), (98, 2), (2, 29), (29, 60), (60, 35), (35, 56), (56, 96), (96, 41), (41, 55), (55, 11), (11, 81), (81, 54), (54, 71), (71, 24), (24, 14), (14, 73), (73, 77), (77, 84), (84, 62), (62, 9), (9, 67), (67, 23), (23, 91), (91, 97), (97, 83), (83, 82), (82, 3), (3, 40), (40, 20), (20, 16), (16, 22), (22, 76), (76, 88), (88, 48), (48, 66), (66, 79), (79, 38), (38, 70), (70, 0)], 21967.968633840992)
([(0, 63), (63, 68), (68, 59), (59, 19), (19, 33), (33, 52), (52, 17), (17, 39), (39, 81), (81, 34), (34, 76), (76, 83), (83, 80), (80, 50), (50, 79), (79, 84), (84, 74), (74, 26), (26, 9), (9, 57), (57, 7), (7, 1), (1, 91), (91, 46), (46, 87), (87, 94), (94, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 13), (13, 62), (62, 77), (77, 64), (64, 93), (93, 72), (72, 61), (61, 32), (32, 89), (89, 56), (56, 96), (96, 70), (70, 15), (15, 53), (53, 38), (38, 29), (29, 82), (82, 28), (28, 42), (42, 51), (51, 92), (92, 97), (97, 24), (24, 71), (71, 55), (55, 78), (78, 18), (18, 58), (58, 75), (75, 40), (40, 20), (20, 36), (36, 98), (98, 95), (95, 8), (8, 47), (47, 54), (54, 16), (16, 60), (60, 49), (49, 99), (99, 11), (11, 85), (85, 86), (86, 67), (67, 4), (4, 23), (23, 66), (66, 69), (69, 21), (21, 10), (10, 22), (22, 41), (41, 37), (37, 65), (65, 35), (35, 48), (48, 88), (88, 5), (5, 90), (90, 6), (6, 45), (45, 12), (12, 27), (27, 73), (73, 14), (14, 3), (3, 2), (2, 0)], 22537.740701770344)
([(0, 63), (63, 14), (14, 73), (73, 24), (24, 18), (18, 80), (80, 34), (34, 11), (11, 86), (86, 51), (51, 92), (92, 46), (46, 87), (87, 74), (74, 55), (55, 78), (78, 95), (95, 37), (37, 28), (28, 19), (19, 33), (33, 47), (47, 6), (6, 5), (5, 90), (90, 1), (1, 45), (45, 54), (54, 53), (53, 99), (99, 89), (89, 32), (32, 85), (85, 2), (2, 23), (23, 66), (66, 21), (21, 42), (42, 58), (58, 25), (25, 72), (72, 61), (61, 39), (39, 17), (17, 22), (22, 76), (76, 8), (8, 79), (79, 62), (62, 9), (9, 7), (7, 57), (57, 10), (10, 84), (84, 27), (27, 70), (70, 52), (52, 50), (50, 88), (88, 82), (82, 15), (15, 83), (83, 65), (65, 97), (97, 71), (71, 29), (29, 41), (41, 48), (48, 75), (75, 43), (43, 81), (81, 36), (36, 69), (69, 68), (68, 59), (59, 98), (98, 31), (31, 30), (30, 67), (67, 4), (4, 91), (91, 94), (94, 44), (44, 3), (3, 12), (12, 20), (20, 40), (40, 60), (60, 35), (35, 93), (93, 64), (64, 49), (49, 56), (56, 96), (96, 77), (77, 16), (16, 38), (38, 26), (26, 13), (13, 0)], 23296.253480141964)
([(0, 63), (63, 91), (91, 84), (84, 27), (27, 33), (33, 68), (68, 59), (59, 12), (12, 40), (40, 20), (20, 93), (93, 17), (17, 39), (39, 56), (56, 96), (96, 72), (72, 61), (61, 82), (82, 65), (65, 75), (75, 76), (76, 47), (47, 23), (23, 67), (67, 4), (4, 46), (46, 26), (26, 43), (43, 83), (83, 15), (15, 24), (24, 71), (71, 48), (48, 18), (18, 42), (42, 21), (21, 69), (69, 28), (28, 36), (36, 70), (70, 45), (45, 30), (30, 94), (94, 58), (58, 88), (88, 97), (97, 50), (50, 52), (52, 54), (54, 64), (64, 89), (89, 32), (32, 16), (16, 73), (73, 14), (14, 99), (99, 19), (19, 95), (95, 1), (1, 5), (5, 90), (90, 6), (6, 55), (55, 78), (78, 8), (8, 57), (57, 7), (7, 9), (9, 74), (74, 98), (98, 85), (85, 2), (2, 11), (11, 80), (80, 53), (53, 37), (37, 22), (22, 41), (41, 86), (86, 38), (38, 29), (29, 77), (77, 49), (49, 3), (3, 92), (92, 51), (51, 87), (87, 13), (13, 79), (79, 34), (34, 62), (62, 10), (10, 31), (31, 25), (25, 44), (44, 66), (66, 35), (35, 81), (81, 60), (60, 0)], 20069.936850360817)
([(0, 63), (63, 16), (16, 73), (73, 14), (14, 9), (9, 74), (74, 46), (46, 26), (26, 27), (27, 4), (4, 23), (23, 67), (67, 1), (1, 95), (95, 6), (6, 45), (45, 69), (69, 54), (54, 77), (77, 61), (61, 72), (72, 96), (96, 17), (17, 49), (49, 20), (20, 40), (40, 64), (64, 37), (37, 10), (10, 84), (84, 91), (91, 22), (22, 55), (55, 18), (18, 52), (52, 58), (58, 41), (41, 48), (48, 51), (51, 5), (5, 42), (42, 21), (21, 35), (35, 76), (76, 38), (38, 82), (82, 29), (29, 81), (81, 2), (2, 11), (11, 65), (65, 97), (97, 92), (92, 78), (78, 34), (34, 8), (8, 62), (62, 19), (19, 87), (87, 94), (94, 83), (83, 15), (15, 53), (53, 80), (80, 50), (50, 28), (28, 90), (90, 25), (25, 43), (43, 31), (31, 30), (30, 44), (44, 59), (59, 68), (68, 85), (85, 89), (89, 32), (32, 79), (79, 33), (33, 98), (98, 7), (7, 57), (57, 66), (66, 70), (70, 86), (86, 47), (47, 88), (88, 99), (99, 3), (3, 93), (93, 12), (12, 13), (13, 71), (71, 24), (24, 60), (60, 75), (75, 56), (56, 39), (39, 36), (36, 0)], 21642.785657762273)
([(0, 63), (63, 40), (40, 98), (98, 95), (95, 9), (9, 62), (62, 7), (7, 57), (57, 86), (86, 61), (61, 64), (64, 72), (72, 93), (93, 79), (79, 8), (8, 82), (82, 15), (15, 22), (22, 76), (76, 23), (23, 67), (67, 4), (4, 81), (81, 54), (54, 11), (11, 35), (35, 97), (97, 92), (92, 94), (94, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 5), (5, 1), (1, 6), (6, 90), (90, 88), (88, 38), (38, 49), (49, 89), (89, 32), (32, 16), (16, 73), (73, 14), (14, 99), (99, 96), (96, 56), (56, 26), (26, 74), (74, 46), (46, 27), (27, 70), (70, 78), (78, 18), (18, 51), (51, 50), (50, 65), (65, 60), (60, 29), (29, 83), (83, 21), (21, 42), (42, 69), (69, 28), (28, 45), (45, 3), (3, 87), (87, 13), (13, 39), (39, 17), (17, 20), (20, 33), (33, 19), (19, 48), (48, 75), (75, 41), (41, 52), (52, 12), (12, 68), (68, 59), (59, 91), (91, 84), (84, 37), (37, 10), (10, 58), (58, 36), (36, 53), (53, 34), (34, 77), (77, 85), (85, 55), (55, 80), (80, 24), (24, 71), (71, 47), (47, 2), (2, 66), (66, 0)], 20137.28986178048)
([(0, 63), (63, 22), (22, 88), (88, 48), (48, 75), (75, 62), (62, 9), (9, 95), (95, 91), (91, 84), (84, 27), (27, 59), (59, 68), (68, 20), (20, 40), (40, 14), (14, 73), (73, 16), (16, 99), (99, 32), (32, 89), (89, 66), (66, 6), (6, 90), (90, 10), (10, 30), (30, 44), (44, 25), (25, 47), (47, 1), (1, 36), (36, 43), (43, 31), (31, 57), (57, 7), (7, 74), (74, 26), (26, 12), (12, 97), (97, 92), (92, 51), (51, 50), (50, 24), (24, 71), (71, 81), (81, 54), (54, 85), (85, 79), (79, 13), (13, 8), (8, 80), (80, 15), (15, 41), (41, 58), (58, 60), (60, 35), (35, 2), (2, 11), (11, 83), (83, 70), (70, 86), (86, 52), (52, 55), (55, 78), (78, 18), (18, 98), (98, 37), (37, 46), (46, 87), (87, 3), (3, 21), (21, 42), (42, 69), (69, 28), (28, 49), (49, 56), (56, 39), (39, 17), (17, 33), (33, 19), (19, 34), (34, 76), (76, 67), (67, 4), (4, 23), (23, 77), (77, 93), (93, 96), (96, 38), (38, 82), (82, 29), (29, 65), (65, 53), (53, 72), (72, 61), (61, 64), (64, 94), (94, 5), (5, 45), (45, 0)], 19946.641168023634)
([(0, 63), (63, 19), (19, 87), (87, 21), (21, 42), (42, 58), (58, 69), (69, 70), (70, 94), (94, 50), (50, 18), (18, 78), (78, 15), (15, 82), (82, 61), (61, 64), (64, 93), (93, 3), (3, 14), (14, 30), (30, 43), (43, 31), (31, 44), (44, 25), (25, 4), (4, 34), (34, 76), (76, 55), (55, 22), (22, 91), (91, 84), (84, 27), (27, 33), (33, 47), (47, 51), (51, 97), (97, 92), (92, 28), (28, 45), (45, 90), (90, 5), (5, 1), (1, 6), (6, 41), (41, 48), (48, 75), (75, 16), (16, 73), (73, 53), (53, 52), (52, 98), (98, 37), (37, 26), (26, 74), (74, 80), (80, 20), (20, 8), (8, 89), (89, 32), (32, 85), (85, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 99), (99, 12), (12, 40), (40, 72), (72, 81), (81, 54), (54, 23), (23, 67), (67, 68), (68, 59), (59, 66), (66, 36), (36, 65), (65, 29), (29, 11), (11, 2), (2, 83), (83, 86), (86, 13), (13, 79), (79, 38), (38, 88), (88, 71), (71, 24), (24, 77), (77, 57), (57, 7), (7, 9), (9, 46), (46, 10), (10, 62), (62, 95), (95, 35), (35, 60), (60, 0)], 20094.15295876681)
([(0, 63), (63, 47), (47, 92), (92, 32), (32, 89), (89, 19), (19, 33), (33, 8), (8, 57), (57, 7), (7, 44), (44, 43), (43, 31), (31, 30), (30, 25), (25, 16), (16, 73), (73, 14), (14, 99), (99, 39), (39, 17), (17, 93), (93, 96), (96, 56), (56, 49), (49, 77), (77, 85), (85, 54), (54, 81), (81, 5), (5, 90), (90, 6), (6, 55), (55, 78), (78, 18), (18, 52), (52, 35), (35, 60), (60, 11), (11, 24), (24, 83), (83, 15), (15, 2), (2, 64), (64, 72), (72, 61), (61, 20), (20, 40), (40, 76), (76, 46), (46, 26), (26, 74), (74, 59), (59, 80), (80, 50), (50, 41), (41, 48), (48, 75), (75, 86), (86, 22), (22, 27), (27, 37), (37, 10), (10, 12), (12, 13), (13, 1), (1, 68), (68, 62), (62, 23), (23, 67), (67, 4), (4, 91), (91, 84), (84, 51), (51, 97), (97, 65), (65, 9), (9, 87), (87, 3), (3, 34), (34, 71), (71, 36), (36, 94), (94, 98), (98, 95), (95, 45), (45, 28), (28, 69), (69, 21), (21, 42), (42, 53), (53, 38), (38, 82), (82, 29), (29, 79), (79, 58), (58, 66), (66, 88), (88, 70), (70, 0)], 19769.05720404011)
([(0, 63), (63, 87), (87, 94), (94, 38), (38, 77), (77, 17), (17, 39), (39, 72), (72, 12), (12, 75), (75, 27), (27, 91), (91, 67), (67, 4), (4, 23), (23, 7), (7, 57), (57, 24), (24, 71), (71, 65), (65, 53), (53, 68), (68, 59), (59, 32), (32, 89), (89, 49), (49, 56), (56, 85), (85, 97), (97, 92), (92, 51), (51, 50), (50, 18), (18, 78), (78, 55), (55, 11), (11, 15), (15, 82), (82, 31), (31, 30), (30, 44), (44, 43), (43, 19), (19, 33), (33, 93), (93, 64), (64, 73), (73, 14), (14, 16), (16, 96), (96, 60), (60, 2), (2, 80), (80, 58), (58, 41), (41, 83), (83, 84), (84, 34), (34, 76), (76, 62), (62, 79), (79, 8), (8, 13), (13, 46), (46, 26), (26, 74), (74, 25), (25, 42), (42, 21), (21, 69), (69, 28), (28, 36), (36, 37), (37, 10), (10, 9), (9, 48), (48, 22), (22, 52), (52, 40), (40, 20), (20, 3), (3, 61), (61, 70), (70, 90), (90, 6), (6, 5), (5, 45), (45, 66), (66, 1), (1, 95), (95, 47), (47, 88), (88, 86), (86, 98), (98, 99), (99, 81), (81, 54), (54, 29), (29, 35), (35, 0)], 19771.234250276488)
([(0, 63), (63, 52), (52, 55), (55, 78), (78, 18), (18, 99), (99, 17), (17, 39), (39, 64), (64, 93), (93, 61), (61, 72), (72, 20), (20, 43), (43, 31), (31, 30), (30, 33), (33, 59), (59, 8), (8, 32), (32, 89), (89, 96), (96, 56), (56, 49), (49, 54), (54, 81), (81, 29), (29, 35), (35, 44), (44, 25), (25, 27), (27, 91), (91, 84), (84, 88), (88, 48), (48, 75), (75, 41), (41, 86), (86, 50), (50, 24), (24, 71), (71, 65), (65, 83), (83, 97), (97, 92), (92, 51), (51, 98), (98, 47), (47, 4), (4, 23), (23, 67), (67, 68), (68, 34), (34, 76), (76, 26), (26, 74), (74, 46), (46, 87), (87, 1), (1, 6), (6, 90), (90, 5), (5, 45), (45, 66), (66, 28), (28, 69), (69, 21), (21, 42), (42, 58), (58, 36), (36, 19), (19, 22), (22, 14), (14, 73), (73, 12), (12, 3), (3, 10), (10, 62), (62, 9), (9, 57), (57, 7), (7, 53), (53, 38), (38, 2), (2, 11), (11, 80), (80, 15), (15, 82), (82, 60), (60, 40), (40, 16), (16, 77), (77, 85), (85, 70), (70, 37), (37, 95), (95, 94), (94, 13), (13, 79), (79, 0)], 16756.237333125813)
([(0, 63), (63, 22), (22, 55), (55, 75), (75, 94), (94, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 3), (3, 95), (95, 24), (24, 71), (71, 2), (2, 28), (28, 6), (6, 90), (90, 5), (5, 1), (1, 48), (48, 51), (51, 92), (92, 97), (97, 80), (80, 76), (76, 34), (34, 13), (13, 68), (68, 59), (59, 91), (91, 84), (84, 65), (65, 83), (83, 29), (29, 52), (52, 50), (50, 18), (18, 32), (32, 89), (89, 54), (54, 81), (81, 99), (99, 77), (77, 15), (15, 82), (82, 11), (11, 35), (35, 40), (40, 16), (16, 73), (73, 14), (14, 49), (49, 56), (56, 96), (96, 93), (93, 64), (64, 72), (72, 61), (61, 79), (79, 8), (8, 26), (26, 74), (74, 46), (46, 27), (27, 33), (33, 19), (19, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 69), (69, 21), (21, 42), (42, 58), (58, 87), (87, 12), (12, 47), (47, 37), (37, 10), (10, 62), (62, 9), (9, 36), (36, 20), (20, 39), (39, 17), (17, 70), (70, 86), (86, 78), (78, 88), (88, 66), (66, 45), (45, 53), (53, 38), (38, 41), (41, 60), (60, 85), (85, 98), (98, 0)], 20145.920024016446)
([(0, 63), (63, 19), (19, 33), (33, 68), (68, 59), (59, 18), (18, 9), (9, 5), (5, 90), (90, 4), (4, 23), (23, 67), (67, 37), (37, 61), (61, 39), (39, 17), (17, 93), (93, 64), (64, 85), (85, 89), (89, 32), (32, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 94), (94, 74), (74, 46), (46, 87), (87, 70), (70, 42), (42, 21), (21, 69), (69, 6), (6, 45), (45, 1), (1, 95), (95, 26), (26, 84), (84, 27), (27, 91), (91, 76), (76, 34), (34, 22), (22, 7), (7, 57), (57, 62), (62, 10), (10, 92), (92, 97), (97, 71), (71, 24), (24, 80), (80, 50), (50, 54), (54, 79), (79, 8), (8, 60), (60, 38), (38, 2), (2, 15), (15, 82), (82, 29), (29, 83), (83, 65), (65, 52), (52, 53), (53, 78), (78, 51), (51, 88), (88, 75), (75, 41), (41, 58), (58, 36), (36, 28), (28, 47), (47, 72), (72, 73), (73, 14), (14, 16), (16, 99), (99, 81), (81, 77), (77, 55), (55, 98), (98, 86), (86, 48), (48, 96), (96, 56), (56, 49), (49, 3), (3, 40), (40, 20), (20, 12), (12, 13), (13, 66), (66, 35), (35, 11), (11, 0)], 17467.20837760273)
([(0, 63), (63, 26), (26, 9), (9, 57), (57, 7), (7, 10), (10, 37), (37, 95), (95, 71), (71, 24), (24, 73), (73, 14), (14, 40), (40, 20), (20, 93), (93, 64), (64, 72), (72, 61), (61, 89), (89, 32), (32, 16), (16, 96), (96, 56), (56, 49), (49, 99), (99, 38), (38, 29), (29, 15), (15, 77), (77, 85), (85, 81), (81, 54), (54, 79), (79, 13), (13, 8), (8, 42), (42, 21), (21, 69), (69, 58), (58, 41), (41, 48), (48, 75), (75, 22), (22, 50), (50, 18), (18, 52), (52, 39), (39, 17), (17, 46), (46, 74), (74, 94), (94, 45), (45, 98), (98, 5), (5, 90), (90, 28), (28, 66), (66, 1), (1, 6), (6, 68), (68, 59), (59, 27), (27, 91), (91, 84), (84, 62), (62, 47), (47, 53), (53, 82), (82, 34), (34, 76), (76, 51), (51, 65), (65, 83), (83, 35), (35, 2), (2, 11), (11, 88), (88, 92), (92, 97), (97, 30), (30, 44), (44, 25), (25, 31), (31, 43), (43, 67), (67, 4), (4, 23), (23, 36), (36, 33), (33, 19), (19, 78), (78, 55), (55, 86), (86, 60), (60, 87), (87, 3), (3, 12), (12, 80), (80, 70), (70, 0)], 18405.429603757653)
([(0, 63), (63, 79), (79, 8), (8, 12), (12, 3), (3, 20), (20, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 77), (77, 68), (68, 59), (59, 19), (19, 33), (33, 46), (46, 26), (26, 74), (74, 84), (84, 34), (34, 76), (76, 69), (69, 21), (21, 42), (42, 47), (47, 31), (31, 30), (30, 43), (43, 25), (25, 44), (44, 36), (36, 28), (28, 66), (66, 41), (41, 48), (48, 75), (75, 9), (9, 57), (57, 7), (7, 24), (24, 71), (71, 65), (65, 29), (29, 38), (38, 18), (18, 52), (52, 50), (50, 92), (92, 55), (55, 78), (78, 51), (51, 88), (88, 58), (58, 13), (13, 16), (16, 73), (73, 14), (14, 99), (99, 80), (80, 15), (15, 82), (82, 40), (40, 91), (91, 4), (4, 23), (23, 67), (67, 86), (86, 11), (11, 35), (35, 2), (2, 81), (81, 54), (54, 90), (90, 1), (1, 5), (5, 6), (6, 70), (70, 98), (98, 53), (53, 83), (83, 94), (94, 62), (62, 10), (10, 37), (37, 45), (45, 27), (27, 87), (87, 60), (60, 85), (85, 89), (89, 32), (32, 22), (22, 95), (95, 97), (97, 0)], 17379.61258199351)
([(0, 63), (63, 28), (28, 36), (36, 5), (5, 90), (90, 6), (6, 45), (45, 82), (82, 29), (29, 35), (35, 2), (2, 11), (11, 41), (41, 48), (48, 75), (75, 46), (46, 19), (19, 33), (33, 68), (68, 59), (59, 3), (3, 72), (72, 61), (61, 99), (99, 16), (16, 73), (73, 14), (14, 40), (40, 20), (20, 83), (83, 97), (97, 92), (92, 51), (51, 50), (50, 65), (65, 94), (94, 62), (62, 10), (10, 74), (74, 26), (26, 27), (27, 84), (84, 57), (57, 7), (7, 12), (12, 91), (91, 37), (37, 95), (95, 1), (1, 98), (98, 70), (70, 87), (87, 17), (17, 39), (39, 64), (64, 93), (93, 53), (53, 38), (38, 77), (77, 85), (85, 79), (79, 8), (8, 13), (13, 52), (52, 9), (9, 49), (49, 56), (56, 96), (96, 81), (81, 54), (54, 67), (67, 4), (4, 23), (23, 76), (76, 34), (34, 43), (43, 31), (31, 30), (30, 44), (44, 25), (25, 66), (66, 69), (69, 21), (21, 42), (42, 58), (58, 88), (88, 18), (18, 55), (55, 78), (78, 86), (86, 47), (47, 71), (71, 24), (24, 80), (80, 15), (15, 22), (22, 60), (60, 89), (89, 32), (32, 0)], 18007.033536455143)
([(0, 63), (63, 34), (34, 76), (76, 27), (27, 84), (84, 91), (91, 57), (57, 7), (7, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 22), (22, 26), (26, 74), (74, 46), (46, 28), (28, 66), (66, 52), (52, 38), (38, 61), (61, 17), (17, 39), (39, 72), (72, 13), (13, 19), (19, 33), (33, 82), (82, 83), (83, 15), (15, 75), (75, 48), (48, 58), (58, 69), (69, 21), (21, 42), (42, 80), (80, 50), (50, 18), (18, 78), (78, 55), (55, 79), (79, 8), (8, 97), (97, 92), (92, 51), (51, 67), (67, 4), (4, 23), (23, 59), (59, 68), (68, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 37), (37, 10), (10, 36), (36, 96), (96, 56), (56, 49), (49, 88), (88, 71), (71, 24), (24, 47), (47, 12), (12, 3), (3, 40), (40, 20), (20, 16), (16, 73), (73, 14), (14, 99), (99, 89), (89, 32), (32, 93), (93, 64), (64, 85), (85, 54), (54, 81), (81, 77), (77, 60), (60, 11), (11, 35), (35, 2), (2, 53), (53, 9), (9, 62), (62, 95), (95, 98), (98, 70), (70, 86), (86, 87), (87, 94), (94, 41), (41, 65), (65, 29), (29, 0)], 16825.968564249964)
([(0, 63), (63, 19), (19, 33), (33, 67), (67, 23), (23, 7), (7, 57), (57, 95), (95, 76), (76, 58), (58, 41), (41, 48), (48, 75), (75, 11), (11, 35), (35, 82), (82, 65), (65, 66), (66, 42), (42, 21), (21, 69), (69, 36), (36, 10), (10, 62), (62, 9), (9, 98), (98, 37), (37, 53), (53, 85), (85, 81), (81, 54), (54, 49), (49, 56), (56, 17), (17, 39), (39, 72), (72, 61), (61, 64), (64, 93), (93, 46), (46, 74), (74, 26), (26, 12), (12, 91), (91, 90), (90, 6), (6, 28), (28, 45), (45, 1), (1, 5), (5, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 94), (94, 83), (83, 80), (80, 50), (50, 52), (52, 15), (15, 2), (2, 38), (38, 32), (32, 89), (89, 16), (16, 99), (99, 14), (14, 73), (73, 3), (3, 40), (40, 20), (20, 55), (55, 78), (78, 18), (18, 27), (27, 84), (84, 88), (88, 22), (22, 51), (51, 92), (92, 97), (97, 24), (24, 71), (71, 4), (4, 34), (34, 8), (8, 87), (87, 47), (47, 70), (70, 86), (86, 59), (59, 68), (68, 13), (13, 79), (79, 29), (29, 60), (60, 77), (77, 96), (96, 0)], 16203.67479932271)
([(0, 33), (33, 19), (19, 34), (34, 22), (22, 66), (66, 23), (23, 67), (67, 4), (4, 74), (74, 26), (26, 42), (42, 21), (21, 9), (9, 57), (57, 7), (7, 70), (70, 45), (45, 92), (92, 97), (97, 71), (71, 24), (24, 88), (88, 86), (86, 41), (41, 48), (48, 58), (58, 69), (69, 62), (62, 10), (10, 53), (53, 38), (38, 82), (82, 15), (15, 83), (83, 47), (47, 51), (51, 78), (78, 18), (18, 55), (55, 52), (52, 50), (50, 91), (91, 68), (68, 59), (59, 44), (44, 30), (30, 43), (43, 31), (31, 25), (25, 35), (35, 2), (2, 11), (11, 63), (63, 81), (81, 54), (54, 56), (56, 96), (96, 17), (17, 39), (39, 72), (72, 61), (61, 99), (99, 3), (3, 40), (40, 37), (37, 80), (80, 16), (16, 73), (73, 14), (14, 8), (8, 89), (89, 32), (32, 85), (85, 64), (64, 93), (93, 49), (49, 12), (12, 1), (1, 5), (5, 90), (90, 6), (6, 98), (98, 95), (95, 75), (75, 27), (27, 84), (84, 46), (46, 87), (87, 13), (13, 79), (79, 20), (20, 65), (65, 29), (29, 60), (60, 77), (77, 76), (76, 28), (28, 36), (36, 94), (94, 0)], 18150.42997710178)
([(0, 63), (63, 66), (66, 36), (36, 6), (6, 90), (90, 1), (1, 5), (5, 57), (57, 7), (7, 37), (37, 10), (10, 22), (22, 55), (55, 52), (52, 84), (84, 27), (27, 4), (4, 23), (23, 67), (67, 40), (40, 20), (20, 32), (32, 89), (89, 60), (60, 11), (11, 35), (35, 38), (38, 15), (15, 83), (83, 29), (29, 82), (82, 65), (65, 54), (54, 2), (2, 77), (77, 85), (85, 79), (79, 8), (8, 19), (19, 33), (33, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 61), (61, 39), (39, 17), (17, 72), (72, 88), (88, 86), (86, 21), (21, 42), (42, 69), (69, 47), (47, 70), (70, 9), (9, 97), (97, 92), (92, 51), (51, 78), (78, 18), (18, 48), (48, 58), (58, 24), (24, 71), (71, 76), (76, 34), (34, 46), (46, 26), (26, 74), (74, 59), (59, 68), (68, 87), (87, 13), (13, 14), (14, 73), (73, 16), (16, 99), (99, 3), (3, 93), (93, 64), (64, 49), (49, 56), (56, 96), (96, 81), (81, 80), (80, 50), (50, 45), (45, 75), (75, 41), (41, 53), (53, 62), (62, 95), (95, 28), (28, 98), (98, 94), (94, 12), (12, 91), (91, 0)], 16662.88511382574)
([(0, 63), (63, 9), (9, 57), (57, 7), (7, 62), (62, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 98), (98, 95), (95, 37), (37, 10), (10, 30), (30, 44), (44, 25), (25, 43), (43, 31), (31, 36), (36, 28), (28, 4), (4, 23), (23, 67), (67, 70), (70, 75), (75, 41), (41, 48), (48, 51), (51, 92), (92, 97), (97, 78), (78, 18), (18, 50), (50, 29), (29, 65), (65, 88), (88, 14), (14, 73), (73, 16), (16, 99), (99, 59), (59, 68), (68, 13), (13, 46), (46, 26), (26, 74), (74, 94), (94, 33), (33, 19), (19, 76), (76, 34), (34, 22), (22, 55), (55, 8), (8, 39), (39, 17), (17, 93), (93, 72), (72, 61), (61, 64), (64, 89), (89, 32), (32, 15), (15, 82), (82, 91), (91, 84), (84, 27), (27, 86), (86, 69), (69, 66), (66, 42), (42, 21), (21, 58), (58, 49), (49, 56), (56, 96), (96, 87), (87, 12), (12, 79), (79, 40), (40, 20), (20, 3), (3, 77), (77, 85), (85, 54), (54, 81), (81, 2), (2, 38), (38, 60), (60, 11), (11, 35), (35, 52), (52, 24), (24, 71), (71, 80), (80, 83), (83, 53), (53, 47), (47, 0)], 13942.935933609624)
([(0, 63), (63, 38), (38, 2), (2, 11), (11, 35), (35, 92), (92, 20), (20, 40), (40, 3), (3, 12), (12, 79), (79, 37), (37, 10), (10, 74), (74, 31), (31, 30), (30, 44), (44, 43), (43, 98), (98, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 70), (70, 42), (42, 21), (21, 55), (55, 78), (78, 18), (18, 76), (76, 34), (34, 94), (94, 68), (68, 59), (59, 19), (19, 33), (33, 91), (91, 84), (84, 46), (46, 26), (26, 13), (13, 14), (14, 73), (73, 16), (16, 99), (99, 77), (77, 85), (85, 53), (53, 71), (71, 24), (24, 51), (51, 56), (56, 96), (96, 32), (32, 89), (89, 15), (15, 82), (82, 29), (29, 65), (65, 54), (54, 81), (81, 39), (39, 17), (17, 49), (49, 66), (66, 28), (28, 36), (36, 86), (86, 48), (48, 75), (75, 41), (41, 58), (58, 69), (69, 62), (62, 95), (95, 47), (47, 22), (22, 97), (97, 50), (50, 80), (80, 83), (83, 87), (87, 88), (88, 64), (64, 93), (93, 72), (72, 61), (61, 8), (8, 27), (27, 9), (9, 52), (52, 60), (60, 25), (25, 0)], 17770.47186366373)
([(0, 63), (63, 33), (33, 19), (19, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 55), (55, 11), (11, 35), (35, 14), (14, 73), (73, 16), (16, 99), (99, 79), (79, 8), (8, 13), (13, 41), (41, 86), (86, 34), (34, 76), (76, 22), (22, 74), (74, 26), (26, 57), (57, 7), (7, 37), (37, 95), (95, 98), (98, 5), (5, 90), (90, 6), (6, 91), (91, 47), (47, 52), (52, 58), (58, 69), (69, 21), (21, 42), (42, 66), (66, 46), (46, 87), (87, 72), (72, 61), (61, 64), (64, 93), (93, 81), (81, 54), (54, 32), (32, 89), (89, 1), (1, 4), (4, 23), (23, 67), (67, 78), (78, 18), (18, 97), (97, 92), (92, 51), (51, 88), (88, 75), (75, 48), (48, 50), (50, 80), (80, 15), (15, 53), (53, 82), (82, 29), (29, 65), (65, 83), (83, 20), (20, 40), (40, 77), (77, 85), (85, 56), (56, 96), (96, 49), (49, 12), (12, 24), (24, 71), (71, 38), (38, 70), (70, 45), (45, 28), (28, 36), (36, 27), (27, 84), (84, 62), (62, 9), (9, 10), (10, 94), (94, 68), (68, 59), (59, 3), (3, 39), (39, 17), (17, 2), (2, 60), (60, 0)], 17028.020568686996)
([(0, 63), (63, 79), (79, 8), (8, 99), (99, 12), (12, 13), (13, 57), (57, 7), (7, 62), (62, 10), (10, 37), (37, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 86), (86, 67), (67, 4), (4, 23), (23, 28), (28, 58), (58, 41), (41, 48), (48, 75), (75, 6), (6, 45), (45, 36), (36, 19), (19, 33), (33, 73), (73, 14), (14, 16), (16, 77), (77, 85), (85, 89), (89, 32), (32, 54), (54, 81), (81, 61), (61, 39), (39, 17), (17, 72), (72, 64), (64, 96), (96, 56), (56, 49), (49, 15), (15, 82), (82, 65), (65, 50), (50, 18), (18, 78), (78, 51), (51, 92), (92, 97), (97, 83), (83, 88), (88, 24), (24, 71), (71, 35), (35, 2), (2, 38), (38, 80), (80, 66), (66, 42), (42, 21), (21, 69), (69, 70), (70, 9), (9, 47), (47, 29), (29, 11), (11, 22), (22, 34), (34, 76), (76, 27), (27, 91), (91, 84), (84, 74), (74, 26), (26, 98), (98, 95), (95, 90), (90, 5), (5, 1), (1, 52), (52, 55), (55, 68), (68, 59), (59, 3), (3, 40), (40, 93), (93, 20), (20, 87), (87, 94), (94, 46), (46, 53), (53, 60), (60, 0)], 14558.172183969591)
([(0, 63), (63, 33), (33, 19), (19, 34), (34, 76), (76, 22), (22, 50), (50, 18), (18, 52), (52, 87), (87, 57), (57, 7), (7, 9), (9, 21), (21, 42), (42, 58), (58, 86), (86, 47), (47, 55), (55, 8), (8, 97), (97, 92), (92, 23), (23, 67), (67, 4), (4, 91), (91, 84), (84, 41), (41, 48), (48, 88), (88, 75), (75, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 56), (56, 96), (96, 26), (26, 74), (74, 46), (46, 27), (27, 25), (25, 43), (43, 31), (31, 30), (30, 44), (44, 70), (70, 28), (28, 90), (90, 5), (5, 1), (1, 11), (11, 35), (35, 2), (2, 82), (82, 29), (29, 71), (71, 24), (24, 83), (83, 65), (65, 78), (78, 51), (51, 32), (32, 89), (89, 16), (16, 73), (73, 14), (14, 40), (40, 20), (20, 54), (54, 81), (81, 60), (60, 79), (79, 62), (62, 10), (10, 37), (37, 36), (36, 66), (66, 6), (6, 45), (45, 98), (98, 95), (95, 38), (38, 77), (77, 85), (85, 99), (99, 3), (3, 68), (68, 59), (59, 13), (13, 12), (12, 53), (53, 80), (80, 15), (15, 49), (49, 94), (94, 69), (69, 0)], 16873.58227306871)
([(0, 63), (63, 87), (87, 32), (32, 89), (89, 5), (5, 90), (90, 6), (6, 45), (45, 1), (1, 47), (47, 77), (77, 53), (53, 38), (38, 15), (15, 2), (2, 11), (11, 56), (56, 96), (96, 99), (99, 79), (79, 39), (39, 17), (17, 72), (72, 93), (93, 64), (64, 16), (16, 73), (73, 14), (14, 97), (97, 92), (92, 51), (51, 50), (50, 52), (52, 4), (4, 23), (23, 67), (67, 24), (24, 71), (71, 65), (65, 29), (29, 82), (82, 69), (69, 21), (21, 42), (42, 66), (66, 36), (36, 28), (28, 58), (58, 48), (48, 75), (75, 8), (8, 68), (68, 59), (59, 3), (3, 40), (40, 55), (55, 78), (78, 18), (18, 80), (80, 76), (76, 34), (34, 25), (25, 43), (43, 31), (31, 30), (30, 44), (44, 46), (46, 26), (26, 74), (74, 94), (94, 70), (70, 37), (37, 10), (10, 84), (84, 91), (91, 98), (98, 95), (95, 9), (9, 57), (57, 7), (7, 62), (62, 22), (22, 27), (27, 33), (33, 19), (19, 88), (88, 86), (86, 41), (41, 83), (83, 35), (35, 60), (60, 85), (85, 54), (54, 81), (81, 20), (20, 61), (61, 13), (13, 12), (12, 49), (49, 0)], 16286.623706660803)
([(0, 63), (63, 76), (76, 34), (34, 26), (26, 74), (74, 46), (46, 87), (87, 13), (13, 8), (8, 3), (3, 40), (40, 20), (20, 2), (2, 11), (11, 35), (35, 60), (60, 98), (98, 6), (6, 45), (45, 51), (51, 97), (97, 92), (92, 78), (78, 18), (18, 52), (52, 49), (49, 89), (89, 32), (32, 85), (85, 96), (96, 56), (56, 39), (39, 17), (17, 93), (93, 64), (64, 72), (72, 61), (61, 5), (5, 1), (1, 95), (95, 37), (37, 10), (10, 9), (9, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 86), (86, 47), (47, 12), (12, 16), (16, 73), (73, 14), (14, 77), (77, 99), (99, 79), (79, 28), (28, 70), (70, 83), (83, 15), (15, 38), (38, 80), (80, 50), (50, 55), (55, 22), (22, 21), (21, 69), (69, 66), (66, 24), (24, 71), (71, 65), (65, 29), (29, 82), (82, 75), (75, 48), (48, 88), (88, 90), (90, 30), (30, 44), (44, 25), (25, 43), (43, 31), (31, 33), (33, 19), (19, 91), (91, 84), (84, 27), (27, 59), (59, 68), (68, 53), (53, 54), (54, 81), (81, 36), (36, 58), (58, 41), (41, 42), (42, 62), (62, 94), (94, 0)], 16129.59740148199)
([(0, 63), (63, 8), (8, 68), (68, 59), (59, 88), (88, 33), (33, 19), (19, 98), (98, 95), (95, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 82), (82, 15), (15, 38), (38, 29), (29, 65), (65, 83), (83, 51), (51, 92), (92, 97), (97, 24), (24, 71), (71, 50), (50, 80), (80, 78), (78, 18), (18, 52), (52, 11), (11, 35), (35, 2), (2, 79), (79, 14), (14, 73), (73, 16), (16, 99), (99, 13), (13, 12), (12, 3), (3, 40), (40, 20), (20, 93), (93, 64), (64, 39), (39, 17), (17, 72), (72, 61), (61, 10), (10, 62), (62, 57), (57, 7), (7, 86), (86, 47), (47, 23), (23, 67), (67, 4), (4, 21), (21, 69), (69, 70), (70, 91), (91, 22), (22, 34), (34, 76), (76, 9), (9, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 66), (66, 36), (36, 41), (41, 48), (48, 75), (75, 58), (58, 74), (74, 26), (26, 27), (27, 84), (84, 87), (87, 94), (94, 85), (85, 32), (32, 89), (89, 56), (56, 96), (96, 77), (77, 49), (49, 54), (54, 81), (81, 53), (53, 46), (46, 55), (55, 60), (60, 28), (28, 42), (42, 37), (37, 0)], 15712.204485907456)
([(0, 63), (63, 91), (91, 84), (84, 27), (27, 4), (4, 58), (58, 41), (41, 86), (86, 21), (21, 42), (42, 68), (68, 59), (59, 8), (8, 99), (99, 16), (16, 73), (73, 14), (14, 77), (77, 83), (83, 82), (82, 29), (29, 38), (38, 2), (2, 11), (11, 35), (35, 60), (60, 65), (65, 64), (64, 93), (93, 72), (72, 61), (61, 20), (20, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 26), (26, 74), (74, 46), (46, 87), (87, 12), (12, 3), (3, 40), (40, 32), (32, 89), (89, 76), (76, 34), (34, 81), (81, 54), (54, 66), (66, 36), (36, 28), (28, 6), (6, 10), (10, 5), (5, 90), (90, 1), (1, 92), (92, 97), (97, 80), (80, 50), (50, 18), (18, 55), (55, 78), (78, 51), (51, 52), (52, 67), (67, 23), (23, 7), (7, 57), (57, 70), (70, 9), (9, 62), (62, 31), (31, 43), (43, 25), (25, 44), (44, 88), (88, 48), (48, 75), (75, 69), (69, 98), (98, 95), (95, 37), (37, 30), (30, 94), (94, 19), (19, 33), (33, 13), (13, 53), (53, 22), (22, 79), (79, 85), (85, 15), (15, 24), (24, 71), (71, 47), (47, 45), (45, 0)], 15947.601022013114)
([(0, 63), (63, 17), (17, 39), (39, 64), (64, 93), (93, 61), (61, 72), (72, 80), (80, 27), (27, 84), (84, 91), (91, 19), (19, 33), (33, 51), (51, 55), (55, 78), (78, 18), (18, 52), (52, 50), (50, 70), (70, 28), (28, 40), (40, 20), (20, 3), (3, 32), (32, 89), (89, 56), (56, 96), (96, 54), (54, 81), (81, 16), (16, 73), (73, 14), (14, 99), (99, 62), (62, 9), (9, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 98), (98, 95), (95, 37), (37, 10), (10, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 8), (8, 59), (59, 68), (68, 13), (13, 58), (58, 69), (69, 21), (21, 42), (42, 86), (86, 75), (75, 97), (97, 29), (29, 82), (82, 11), (11, 35), (35, 65), (65, 88), (88, 22), (22, 76), (76, 34), (34, 71), (71, 24), (24, 92), (92, 77), (77, 85), (85, 2), (2, 38), (38, 15), (15, 83), (83, 47), (47, 23), (23, 67), (67, 4), (4, 7), (7, 57), (57, 66), (66, 36), (36, 41), (41, 48), (48, 26), (26, 74), (74, 46), (46, 87), (87, 94), (94, 12), (12, 79), (79, 49), (49, 53), (53, 60), (60, 0)], 14958.335443988053)
([(0, 76), (76, 34), (34, 57), (57, 7), (7, 9), (9, 27), (27, 84), (84, 91), (91, 23), (23, 67), (67, 4), (4, 80), (80, 50), (50, 81), (81, 54), (54, 47), (47, 63), (63, 99), (99, 96), (96, 56), (56, 49), (49, 72), (72, 61), (61, 39), (39, 17), (17, 3), (3, 29), (29, 82), (82, 15), (15, 52), (52, 55), (55, 51), (51, 92), (92, 97), (97, 24), (24, 71), (71, 65), (65, 62), (62, 94), (94, 45), (45, 1), (1, 5), (5, 90), (90, 6), (6, 28), (28, 69), (69, 21), (21, 42), (42, 10), (10, 37), (37, 30), (30, 44), (44, 43), (43, 25), (25, 31), (31, 70), (70, 12), (12, 68), (68, 59), (59, 40), (40, 20), (20, 93), (93, 64), (64, 33), (33, 19), (19, 87), (87, 79), (79, 8), (8, 16), (16, 73), (73, 14), (14, 85), (85, 89), (89, 32), (32, 26), (26, 74), (74, 22), (22, 86), (86, 58), (58, 41), (41, 75), (75, 48), (48, 66), (66, 36), (36, 98), (98, 95), (95, 83), (83, 35), (35, 11), (11, 2), (2, 38), (38, 77), (77, 53), (53, 46), (46, 18), (18, 78), (78, 88), (88, 60), (60, 13), (13, 0)], 16035.230693602482)
([(0, 63), (63, 79), (79, 8), (8, 68), (68, 59), (59, 19), (19, 33), (33, 13), (13, 41), (41, 48), (48, 47), (47, 34), (34, 76), (76, 61), (61, 39), (39, 17), (17, 72), (72, 93), (93, 64), (64, 49), (49, 32), (32, 89), (89, 56), (56, 96), (96, 81), (81, 54), (54, 95), (95, 98), (98, 1), (1, 5), (5, 90), (90, 6), (6, 27), (27, 84), (84, 58), (58, 69), (69, 21), (21, 42), (42, 28), (28, 9), (9, 57), (57, 7), (7, 62), (62, 23), (23, 67), (67, 4), (4, 86), (86, 50), (50, 80), (80, 53), (53, 38), (38, 15), (15, 83), (83, 82), (82, 29), (29, 11), (11, 35), (35, 2), (2, 77), (77, 85), (85, 20), (20, 3), (3, 74), (74, 46), (46, 26), (26, 94), (94, 24), (24, 71), (71, 65), (65, 37), (37, 10), (10, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 36), (36, 55), (55, 78), (78, 18), (18, 52), (52, 88), (88, 97), (97, 92), (92, 51), (51, 75), (75, 87), (87, 12), (12, 14), (14, 73), (73, 16), (16, 66), (66, 70), (70, 91), (91, 22), (22, 40), (40, 99), (99, 60), (60, 45), (45, 0)], 16522.109579963817)
([(0, 63), (63, 19), (19, 33), (33, 46), (46, 26), (26, 74), (74, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 95), (95, 98), (98, 10), (10, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 36), (36, 62), (62, 87), (87, 80), (80, 50), (50, 18), (18, 78), (78, 59), (59, 68), (68, 13), (13, 12), (12, 17), (17, 39), (39, 38), (38, 29), (29, 65), (65, 81), (81, 54), (54, 83), (83, 60), (60, 35), (35, 79), (79, 8), (8, 25), (25, 43), (43, 31), (31, 30), (30, 44), (44, 22), (22, 52), (52, 55), (55, 88), (88, 71), (71, 24), (24, 92), (92, 97), (97, 51), (51, 77), (77, 85), (85, 16), (16, 99), (99, 14), (14, 73), (73, 2), (2, 11), (11, 66), (66, 28), (28, 42), (42, 21), (21, 69), (69, 58), (58, 41), (41, 48), (48, 75), (75, 86), (86, 47), (47, 4), (4, 23), (23, 67), (67, 70), (70, 9), (9, 57), (57, 7), (7, 37), (37, 93), (93, 64), (64, 72), (72, 61), (61, 3), (3, 40), (40, 20), (20, 94), (94, 91), (91, 84), (84, 27), (27, 34), (34, 76), (76, 53), (53, 82), (82, 15), (15, 0)], 15309.278437118399)
([(0, 63), (63, 76), (76, 34), (34, 22), (22, 38), (38, 11), (11, 35), (35, 79), (79, 8), (8, 19), (19, 33), (33, 29), (29, 65), (65, 26), (26, 74), (74, 46), (46, 13), (13, 4), (4, 23), (23, 67), (67, 57), (57, 7), (7, 62), (62, 40), (40, 20), (20, 81), (81, 54), (54, 16), (16, 73), (73, 14), (14, 99), (99, 89), (89, 32), (32, 56), (56, 96), (96, 17), (17, 39), (39, 72), (72, 61), (61, 64), (64, 93), (93, 25), (25, 43), (43, 31), (31, 30), (30, 44), (44, 98), (98, 10), (10, 37), (37, 5), (5, 90), (90, 6), (6, 45), (45, 28), (28, 69), (69, 21), (21, 42), (42, 58), (58, 75), (75, 48), (48, 51), (51, 97), (97, 92), (92, 85), (85, 77), (77, 95), (95, 1), (1, 59), (59, 68), (68, 18), (18, 78), (78, 52), (52, 55), (55, 24), (24, 71), (71, 50), (50, 47), (47, 91), (91, 84), (84, 27), (27, 87), (87, 12), (12, 3), (3, 49), (49, 80), (80, 15), (15, 83), (83, 82), (82, 60), (60, 2), (2, 53), (53, 36), (36, 41), (41, 66), (66, 70), (70, 86), (86, 9), (9, 94), (94, 88), (88, 0)], 16123.365396714815)
([(0, 63), (63, 88), (88, 48), (48, 75), (75, 28), (28, 6), (6, 90), (90, 1), (1, 5), (5, 45), (45, 47), (47, 37), (37, 10), (10, 62), (62, 9), (9, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 94), (94, 74), (74, 26), (26, 27), (27, 84), (84, 59), (59, 68), (68, 87), (87, 13), (13, 83), (83, 51), (51, 78), (78, 18), (18, 50), (50, 80), (80, 82), (82, 15), (15, 38), (38, 29), (29, 86), (86, 41), (41, 69), (69, 21), (21, 42), (42, 32), (32, 89), (89, 96), (96, 56), (56, 97), (97, 92), (92, 35), (35, 11), (11, 2), (2, 77), (77, 85), (85, 34), (34, 76), (76, 22), (22, 55), (55, 14), (14, 49), (49, 99), (99, 16), (16, 73), (73, 79), (79, 8), (8, 12), (12, 40), (40, 72), (72, 61), (61, 39), (39, 17), (17, 93), (93, 64), (64, 91), (91, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 98), (98, 95), (95, 81), (81, 54), (54, 52), (52, 53), (53, 71), (71, 24), (24, 65), (65, 60), (60, 36), (36, 66), (66, 70), (70, 58), (58, 19), (19, 33), (33, 46), (46, 20), (20, 3), (3, 0)], 15958.672086129578)
([(0, 33), (33, 19), (19, 14), (14, 73), (73, 16), (16, 99), (99, 32), (32, 89), (89, 96), (96, 56), (56, 64), (64, 93), (93, 72), (72, 61), (61, 39), (39, 17), (17, 13), (13, 12), (12, 34), (34, 76), (76, 27), (27, 84), (84, 91), (91, 47), (47, 4), (4, 82), (82, 15), (15, 2), (2, 11), (11, 35), (35, 54), (54, 81), (81, 92), (92, 97), (97, 55), (55, 78), (78, 18), (18, 50), (50, 88), (88, 58), (58, 86), (86, 57), (57, 7), (7, 62), (62, 48), (48, 75), (75, 41), (41, 42), (42, 21), (21, 69), (69, 36), (36, 29), (29, 65), (65, 24), (24, 71), (71, 83), (83, 80), (80, 77), (77, 85), (85, 38), (38, 60), (60, 9), (9, 87), (87, 94), (94, 74), (74, 26), (26, 10), (10, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 28), (28, 66), (66, 70), (70, 67), (67, 23), (23, 46), (46, 59), (59, 68), (68, 22), (22, 52), (52, 53), (53, 3), (3, 40), (40, 20), (20, 49), (49, 37), (37, 95), (95, 98), (98, 79), (79, 8), (8, 63), (63, 51), (51, 0)], 14560.94736670288)
([(0, 63), (63, 33), (33, 19), (19, 8), (8, 79), (79, 62), (62, 57), (57, 7), (7, 9), (9, 52), (52, 53), (53, 78), (78, 18), (18, 51), (51, 92), (92, 97), (97, 50), (50, 80), (80, 83), (83, 15), (15, 82), (82, 65), (65, 29), (29, 60), (60, 26), (26, 74), (74, 46), (46, 27), (27, 91), (91, 84), (84, 47), (47, 23), (23, 67), (67, 4), (4, 86), (86, 70), (70, 42), (42, 21), (21, 69), (69, 6), (6, 90), (90, 1), (1, 5), (5, 45), (45, 98), (98, 95), (95, 37), (37, 10), (10, 76), (76, 34), (34, 55), (55, 22), (22, 73), (73, 14), (14, 93), (93, 64), (64, 39), (39, 17), (17, 72), (72, 61), (61, 49), (49, 56), (56, 96), (96, 89), (89, 32), (32, 44), (44, 94), (94, 20), (20, 16), (16, 99), (99, 85), (85, 87), (87, 13), (13, 59), (59, 68), (68, 38), (38, 2), (2, 11), (11, 35), (35, 54), (54, 81), (81, 77), (77, 12), (12, 31), (31, 30), (30, 43), (43, 25), (25, 3), (3, 40), (40, 41), (41, 48), (48, 75), (75, 58), (58, 66), (66, 36), (36, 28), (28, 24), (24, 71), (71, 88), (88, 0)], 14216.083660814913)
([(0, 63), (63, 20), (20, 93), (93, 72), (72, 61), (61, 39), (39, 17), (17, 64), (64, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 54), (54, 81), (81, 94), (94, 50), (50, 80), (80, 46), (46, 26), (26, 74), (74, 27), (27, 84), (84, 91), (91, 4), (4, 23), (23, 67), (67, 48), (48, 75), (75, 41), (41, 45), (45, 1), (1, 5), (5, 90), (90, 6), (6, 28), (28, 42), (42, 21), (21, 69), (69, 70), (70, 31), (31, 30), (30, 44), (44, 25), (25, 43), (43, 57), (57, 7), (7, 9), (9, 62), (62, 10), (10, 37), (37, 65), (65, 83), (83, 15), (15, 82), (82, 29), (29, 35), (35, 11), (11, 53), (53, 97), (97, 92), (92, 78), (78, 18), (18, 52), (52, 55), (55, 13), (13, 12), (12, 3), (3, 77), (77, 85), (85, 99), (99, 14), (14, 73), (73, 16), (16, 76), (76, 34), (34, 33), (33, 19), (19, 59), (59, 68), (68, 87), (87, 79), (79, 8), (8, 58), (58, 86), (86, 47), (47, 51), (51, 24), (24, 71), (71, 60), (60, 2), (2, 38), (38, 88), (88, 36), (36, 66), (66, 95), (95, 98), (98, 40), (40, 22), (22, 0)], 14070.700031616532)
([(0, 63), (63, 34), (34, 69), (69, 21), (21, 42), (42, 36), (36, 28), (28, 66), (66, 83), (83, 82), (82, 15), (15, 29), (29, 65), (65, 97), (97, 24), (24, 71), (71, 50), (50, 18), (18, 78), (78, 51), (51, 92), (92, 80), (80, 38), (38, 76), (76, 22), (22, 55), (55, 99), (99, 14), (14, 73), (73, 16), (16, 53), (53, 81), (81, 54), (54, 52), (52, 3), (3, 40), (40, 32), (32, 89), (89, 96), (96, 20), (20, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 56), (56, 49), (49, 13), (13, 8), (8, 19), (19, 33), (33, 79), (79, 46), (46, 26), (26, 74), (74, 87), (87, 94), (94, 31), (31, 43), (43, 10), (10, 37), (37, 4), (4, 23), (23, 67), (67, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 98), (98, 95), (95, 9), (9, 57), (57, 7), (7, 62), (62, 84), (84, 27), (27, 91), (91, 30), (30, 44), (44, 25), (25, 12), (12, 48), (48, 75), (75, 41), (41, 86), (86, 47), (47, 58), (58, 70), (70, 59), (59, 68), (68, 88), (88, 85), (85, 77), (77, 2), (2, 11), (11, 35), (35, 60), (60, 0)], 13912.231629402302)
([(0, 63), (63, 8), (8, 79), (79, 4), (4, 23), (23, 67), (67, 47), (47, 22), (22, 34), (34, 76), (76, 26), (26, 74), (74, 27), (27, 91), (91, 84), (84, 37), (37, 68), (68, 59), (59, 42), (42, 21), (21, 69), (69, 58), (58, 41), (41, 86), (86, 75), (75, 48), (48, 55), (55, 78), (78, 51), (51, 92), (92, 97), (97, 83), (83, 82), (82, 15), (15, 50), (50, 80), (80, 44), (44, 43), (43, 31), (31, 30), (30, 94), (94, 90), (90, 6), (6, 45), (45, 98), (98, 95), (95, 9), (9, 62), (62, 57), (57, 7), (7, 10), (10, 52), (52, 18), (18, 29), (29, 65), (65, 99), (99, 89), (89, 32), (32, 85), (85, 77), (77, 53), (53, 38), (38, 2), (2, 11), (11, 35), (35, 60), (60, 81), (81, 54), (54, 3), (3, 40), (40, 20), (20, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 46), (46, 87), (87, 13), (13, 12), (12, 96), (96, 56), (56, 49), (49, 73), (73, 14), (14, 16), (16, 5), (5, 1), (1, 88), (88, 24), (24, 71), (71, 19), (19, 33), (33, 70), (70, 28), (28, 66), (66, 36), (36, 25), (25, 0)], 14258.911225827072)
([(0, 63), (63, 20), (20, 3), (3, 40), (40, 64), (64, 93), (93, 72), (72, 61), (61, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 12), (12, 98), (98, 95), (95, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 10), (10, 62), (62, 57), (57, 7), (7, 84), (84, 91), (91, 99), (99, 16), (16, 73), (73, 14), (14, 51), (51, 88), (88, 50), (50, 78), (78, 38), (38, 65), (65, 75), (75, 21), (21, 42), (42, 69), (69, 53), (53, 54), (54, 81), (81, 48), (48, 41), (41, 86), (86, 4), (4, 23), (23, 67), (67, 87), (87, 13), (13, 68), (68, 59), (59, 8), (8, 79), (79, 55), (55, 94), (94, 74), (74, 46), (46, 26), (26, 27), (27, 60), (60, 35), (35, 2), (2, 11), (11, 77), (77, 85), (85, 89), (89, 32), (32, 71), (71, 24), (24, 92), (92, 97), (97, 22), (22, 76), (76, 34), (34, 19), (19, 33), (33, 58), (58, 29), (29, 82), (82, 15), (15, 83), (83, 80), (80, 18), (18, 52), (52, 37), (37, 30), (30, 43), (43, 31), (31, 25), (25, 44), (44, 66), (66, 36), (36, 28), (28, 47), (47, 9), (9, 70), (70, 0)], 15289.682392069517)
([(0, 63), (63, 33), (33, 19), (19, 34), (34, 76), (76, 22), (22, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 56), (56, 96), (96, 32), (32, 89), (89, 40), (40, 20), (20, 3), (3, 2), (2, 11), (11, 35), (35, 60), (60, 7), (7, 57), (57, 9), (9, 62), (62, 46), (46, 26), (26, 74), (74, 27), (27, 4), (4, 91), (91, 84), (84, 8), (8, 68), (68, 59), (59, 97), (97, 92), (92, 51), (51, 78), (78, 18), (18, 52), (52, 50), (50, 80), (80, 82), (82, 29), (29, 65), (65, 55), (55, 16), (16, 73), (73, 14), (14, 99), (99, 85), (85, 38), (38, 15), (15, 83), (83, 12), (12, 13), (13, 48), (48, 75), (75, 36), (36, 66), (66, 58), (58, 41), (41, 86), (86, 67), (67, 23), (23, 45), (45, 28), (28, 6), (6, 90), (90, 1), (1, 5), (5, 98), (98, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 94), (94, 87), (87, 79), (79, 88), (88, 71), (71, 24), (24, 47), (47, 37), (37, 10), (10, 21), (21, 69), (69, 70), (70, 42), (42, 49), (49, 93), (93, 54), (54, 81), (81, 77), (77, 53), (53, 95), (95, 0)], 14505.61626781201)
([(0, 63), (63, 4), (4, 23), (23, 67), (67, 91), (91, 84), (84, 27), (27, 19), (19, 33), (33, 46), (46, 26), (26, 74), (74, 31), (31, 44), (44, 25), (25, 43), (43, 65), (65, 83), (83, 80), (80, 50), (50, 18), (18, 29), (29, 70), (70, 97), (97, 92), (92, 71), (71, 24), (24, 11), (11, 81), (81, 54), (54, 5), (5, 90), (90, 6), (6, 45), (45, 1), (1, 57), (57, 7), (7, 9), (9, 86), (86, 10), (10, 37), (37, 30), (30, 16), (16, 73), (73, 14), (14, 99), (99, 85), (85, 32), (32, 89), (89, 96), (96, 56), (56, 49), (49, 40), (40, 20), (20, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 79), (79, 8), (8, 34), (34, 76), (76, 78), (78, 55), (55, 22), (22, 15), (15, 53), (53, 62), (62, 42), (42, 21), (21, 69), (69, 28), (28, 36), (36, 66), (66, 35), (35, 60), (60, 82), (82, 38), (38, 77), (77, 75), (75, 41), (41, 48), (48, 88), (88, 58), (58, 2), (2, 87), (87, 13), (13, 12), (12, 68), (68, 59), (59, 3), (3, 51), (51, 52), (52, 98), (98, 95), (95, 94), (94, 47), (47, 0)], 16482.89243931372)
([(0, 63), (63, 33), (33, 19), (19, 34), (34, 16), (16, 73), (73, 14), (14, 99), (99, 81), (81, 54), (54, 49), (49, 56), (56, 96), (96, 17), (17, 39), (39, 64), (64, 93), (93, 72), (72, 61), (61, 89), (89, 32), (32, 40), (40, 29), (29, 35), (35, 58), (58, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 98), (98, 95), (95, 75), (75, 41), (41, 48), (48, 62), (62, 10), (10, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 92), (92, 97), (97, 80), (80, 50), (50, 52), (52, 18), (18, 78), (78, 51), (51, 28), (28, 36), (36, 66), (66, 27), (27, 84), (84, 76), (76, 22), (22, 55), (55, 47), (47, 86), (86, 21), (21, 42), (42, 69), (69, 70), (70, 37), (37, 46), (46, 26), (26, 74), (74, 88), (88, 24), (24, 71), (71, 12), (12, 87), (87, 13), (13, 68), (68, 59), (59, 8), (8, 79), (79, 38), (38, 2), (2, 11), (11, 77), (77, 85), (85, 15), (15, 82), (82, 65), (65, 83), (83, 53), (53, 9), (9, 3), (3, 20), (20, 91), (91, 30), (30, 44), (44, 25), (25, 43), (43, 31), (31, 94), (94, 60), (60, 0)], 14964.945669952507)
([(0, 63), (63, 33), (33, 19), (19, 7), (7, 57), (57, 10), (10, 37), (37, 95), (95, 98), (98, 24), (24, 71), (71, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 54), (54, 81), (81, 64), (64, 93), (93, 20), (20, 40), (40, 72), (72, 61), (61, 39), (39, 17), (17, 76), (76, 34), (34, 21), (21, 69), (69, 6), (6, 90), (90, 1), (1, 5), (5, 45), (45, 36), (36, 9), (9, 14), (14, 73), (73, 16), (16, 99), (99, 82), (82, 15), (15, 38), (38, 2), (2, 11), (11, 35), (35, 60), (60, 29), (29, 22), (22, 55), (55, 4), (4, 23), (23, 67), (67, 27), (27, 91), (91, 84), (84, 46), (46, 26), (26, 74), (74, 48), (48, 75), (75, 41), (41, 86), (86, 47), (47, 62), (62, 94), (94, 25), (25, 31), (31, 30), (30, 44), (44, 43), (43, 18), (18, 78), (78, 51), (51, 92), (92, 97), (97, 50), (50, 80), (80, 83), (83, 77), (77, 85), (85, 53), (53, 52), (52, 70), (70, 28), (28, 88), (88, 42), (42, 58), (58, 68), (68, 59), (59, 8), (8, 79), (79, 65), (65, 66), (66, 3), (3, 13), (13, 87), (87, 12), (12, 0)], 15593.615981336867)
([(0, 63), (63, 33), (33, 19), (19, 87), (87, 26), (26, 74), (74, 10), (10, 62), (62, 5), (5, 90), (90, 6), (6, 45), (45, 98), (98, 7), (7, 57), (57, 14), (14, 73), (73, 16), (16, 99), (99, 52), (52, 50), (50, 80), (80, 55), (55, 78), (78, 18), (18, 97), (97, 92), (92, 51), (51, 47), (47, 4), (4, 23), (23, 67), (67, 49), (49, 89), (89, 32), (32, 40), (40, 3), (3, 20), (20, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 35), (35, 11), (11, 86), (86, 48), (48, 75), (75, 41), (41, 58), (58, 69), (69, 21), (21, 42), (42, 27), (27, 95), (95, 1), (1, 83), (83, 60), (60, 24), (24, 71), (71, 65), (65, 29), (29, 82), (82, 2), (2, 15), (15, 76), (76, 22), (22, 38), (38, 77), (77, 85), (85, 81), (81, 54), (54, 53), (53, 88), (88, 34), (34, 46), (46, 84), (84, 91), (91, 94), (94, 31), (31, 30), (30, 44), (44, 43), (43, 37), (37, 9), (9, 66), (66, 36), (36, 28), (28, 70), (70, 59), (59, 68), (68, 13), (13, 8), (8, 79), (79, 96), (96, 56), (56, 12), (12, 25), (25, 0)], 14966.854559426716)
([(0, 63), (63, 79), (79, 8), (8, 59), (59, 68), (68, 16), (16, 73), (73, 14), (14, 53), (53, 99), (99, 27), (27, 84), (84, 91), (91, 87), (87, 74), (74, 46), (46, 26), (26, 92), (92, 51), (51, 78), (78, 18), (18, 50), (50, 80), (80, 20), (20, 3), (3, 40), (40, 61), (61, 39), (39, 17), (17, 64), (64, 72), (72, 93), (93, 96), (96, 56), (56, 49), (49, 89), (89, 32), (32, 85), (85, 55), (55, 22), (22, 36), (36, 58), (58, 75), (75, 48), (48, 82), (82, 15), (15, 83), (83, 71), (71, 24), (24, 88), (88, 97), (97, 65), (65, 29), (29, 10), (10, 37), (37, 95), (95, 98), (98, 5), (5, 90), (90, 6), (6, 45), (45, 1), (1, 67), (67, 23), (23, 41), (41, 86), (86, 47), (47, 9), (9, 57), (57, 7), (7, 62), (62, 21), (21, 42), (42, 69), (69, 70), (70, 66), (66, 28), (28, 43), (43, 31), (31, 30), (30, 44), (44, 25), (25, 12), (12, 11), (11, 35), (35, 2), (2, 38), (38, 19), (19, 33), (33, 34), (34, 76), (76, 4), (4, 52), (52, 54), (54, 81), (81, 60), (60, 77), (77, 13), (13, 94), (94, 0)], 14504.553230228137)
([(0, 63), (63, 33), (33, 19), (19, 34), (34, 76), (76, 22), (22, 55), (55, 78), (78, 18), (18, 52), (52, 53), (53, 38), (38, 15), (15, 83), (83, 88), (88, 71), (71, 24), (24, 80), (80, 50), (50, 92), (92, 97), (97, 75), (75, 41), (41, 48), (48, 21), (21, 42), (42, 84), (84, 91), (91, 4), (4, 23), (23, 67), (67, 68), (68, 59), (59, 8), (8, 79), (79, 3), (3, 20), (20, 58), (58, 69), (69, 57), (57, 7), (7, 62), (62, 5), (5, 90), (90, 6), (6, 45), (45, 1), (1, 86), (86, 47), (47, 51), (51, 44), (44, 43), (43, 31), (31, 30), (30, 94), (94, 74), (74, 26), (26, 27), (27, 93), (93, 72), (72, 61), (61, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 99), (99, 14), (14, 73), (73, 16), (16, 85), (85, 77), (77, 11), (11, 35), (35, 2), (2, 28), (28, 13), (13, 37), (37, 25), (25, 95), (95, 10), (10, 9), (9, 70), (70, 66), (66, 36), (36, 98), (98, 87), (87, 12), (12, 40), (40, 64), (64, 54), (54, 81), (81, 65), (65, 29), (29, 82), (82, 60), (60, 46), (46, 0)], 14355.231333706928)
([(0, 63), (63, 14), (14, 73), (73, 16), (16, 25), (25, 31), (31, 43), (43, 44), (44, 30), (30, 61), (61, 39), (39, 17), (17, 72), (72, 93), (93, 64), (64, 49), (49, 89), (89, 32), (32, 85), (85, 99), (99, 81), (81, 54), (54, 83), (83, 82), (82, 29), (29, 65), (65, 6), (6, 90), (90, 1), (1, 5), (5, 45), (45, 98), (98, 10), (10, 37), (37, 95), (95, 79), (79, 8), (8, 68), (68, 59), (59, 13), (13, 12), (12, 3), (3, 40), (40, 56), (56, 96), (96, 38), (38, 15), (15, 53), (53, 94), (94, 34), (34, 76), (76, 22), (22, 84), (84, 91), (91, 23), (23, 67), (67, 4), (4, 48), (48, 75), (75, 41), (41, 86), (86, 47), (47, 88), (88, 71), (71, 24), (24, 92), (92, 78), (78, 18), (18, 50), (50, 52), (52, 55), (55, 87), (87, 46), (46, 26), (26, 74), (74, 27), (27, 19), (19, 33), (33, 57), (57, 7), (7, 62), (62, 9), (9, 69), (69, 21), (21, 42), (42, 58), (58, 66), (66, 36), (36, 28), (28, 70), (70, 20), (20, 51), (51, 97), (97, 11), (11, 35), (35, 2), (2, 77), (77, 60), (60, 80), (80, 0)], 14239.723193951131)
([(0, 63), (63, 33), (33, 19), (19, 76), (76, 34), (34, 22), (22, 55), (55, 78), (78, 18), (18, 52), (52, 50), (50, 80), (80, 53), (53, 38), (38, 2), (2, 11), (11, 88), (88, 97), (97, 92), (92, 14), (14, 73), (73, 16), (16, 99), (99, 32), (32, 89), (89, 65), (65, 29), (29, 82), (82, 15), (15, 83), (83, 79), (79, 8), (8, 20), (20, 93), (93, 45), (45, 98), (98, 95), (95, 37), (37, 10), (10, 57), (57, 7), (7, 62), (62, 23), (23, 67), (67, 4), (4, 70), (70, 42), (42, 21), (21, 69), (69, 1), (1, 5), (5, 90), (90, 6), (6, 48), (48, 75), (75, 41), (41, 86), (86, 87), (87, 94), (94, 46), (46, 26), (26, 74), (74, 27), (27, 84), (84, 91), (91, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 68), (68, 59), (59, 12), (12, 13), (13, 64), (64, 39), (39, 17), (17, 3), (3, 61), (61, 72), (72, 77), (77, 85), (85, 81), (81, 54), (54, 96), (96, 56), (56, 49), (49, 40), (40, 47), (47, 58), (58, 36), (36, 28), (28, 9), (9, 66), (66, 51), (51, 71), (71, 24), (24, 60), (60, 35), (35, 0)], 13726.493831946971)
([(0, 63), (63, 19), (19, 33), (33, 96), (96, 56), (56, 49), (49, 32), (32, 89), (89, 64), (64, 93), (93, 20), (20, 3), (3, 40), (40, 68), (68, 59), (59, 55), (55, 78), (78, 18), (18, 52), (52, 50), (50, 80), (80, 83), (83, 15), (15, 82), (82, 29), (29, 71), (71, 24), (24, 97), (97, 92), (92, 51), (51, 67), (67, 4), (4, 23), (23, 75), (75, 41), (41, 48), (48, 58), (58, 69), (69, 28), (28, 45), (45, 90), (90, 1), (1, 5), (5, 31), (31, 30), (30, 44), (44, 25), (25, 26), (26, 74), (74, 46), (46, 87), (87, 94), (94, 37), (37, 10), (10, 62), (62, 9), (9, 57), (57, 7), (7, 66), (66, 21), (21, 42), (42, 70), (70, 6), (6, 53), (53, 43), (43, 95), (95, 98), (98, 27), (27, 84), (84, 91), (91, 76), (76, 34), (34, 22), (22, 86), (86, 47), (47, 88), (88, 73), (73, 14), (14, 39), (39, 17), (17, 72), (72, 61), (61, 16), (16, 99), (99, 8), (8, 79), (79, 13), (13, 12), (12, 35), (35, 2), (2, 38), (38, 11), (11, 60), (60, 85), (85, 77), (77, 54), (54, 81), (81, 65), (65, 36), (36, 0)], 14120.909402429945)
([(0, 63), (63, 16), (16, 73), (73, 14), (14, 8), (8, 79), (79, 83), (83, 45), (45, 92), (92, 97), (97, 80), (80, 50), (50, 18), (18, 78), (78, 51), (51, 55), (55, 72), (72, 61), (61, 39), (39, 17), (17, 64), (64, 93), (93, 2), (2, 38), (38, 15), (15, 82), (82, 29), (29, 65), (65, 71), (71, 24), (24, 47), (47, 42), (42, 21), (21, 69), (69, 20), (20, 3), (3, 12), (12, 13), (13, 68), (68, 59), (59, 33), (33, 19), (19, 76), (76, 34), (34, 22), (22, 44), (44, 25), (25, 43), (43, 31), (31, 30), (30, 37), (37, 10), (10, 62), (62, 9), (9, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 86), (86, 70), (70, 28), (28, 66), (66, 36), (36, 98), (98, 95), (95, 1), (1, 5), (5, 90), (90, 6), (6, 58), (58, 41), (41, 49), (49, 56), (56, 96), (96, 32), (32, 85), (85, 26), (26, 74), (74, 94), (94, 27), (27, 84), (84, 91), (91, 88), (88, 75), (75, 48), (48, 53), (53, 77), (77, 99), (99, 89), (89, 60), (60, 35), (35, 11), (11, 52), (52, 46), (46, 87), (87, 40), (40, 54), (54, 81), (81, 0)], 14302.763581724228)
([(0, 63), (63, 33), (33, 19), (19, 34), (34, 76), (76, 22), (22, 55), (55, 78), (78, 18), (18, 50), (50, 80), (80, 83), (83, 15), (15, 82), (82, 29), (29, 65), (65, 31), (31, 30), (30, 43), (43, 44), (44, 25), (25, 4), (4, 23), (23, 27), (27, 91), (91, 84), (84, 94), (94, 74), (74, 46), (46, 26), (26, 59), (59, 8), (8, 79), (79, 16), (16, 73), (73, 14), (14, 40), (40, 20), (20, 93), (93, 64), (64, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 99), (99, 85), (85, 51), (51, 92), (92, 97), (97, 24), (24, 71), (71, 2), (2, 11), (11, 35), (35, 60), (60, 6), (6, 45), (45, 98), (98, 95), (95, 1), (1, 5), (5, 90), (90, 9), (9, 57), (57, 7), (7, 62), (62, 10), (10, 68), (68, 13), (13, 12), (12, 39), (39, 17), (17, 72), (72, 61), (61, 77), (77, 54), (54, 81), (81, 38), (38, 66), (66, 36), (36, 28), (28, 69), (69, 21), (21, 42), (42, 70), (70, 67), (67, 48), (48, 75), (75, 41), (41, 58), (58, 53), (53, 52), (52, 87), (87, 88), (88, 37), (37, 86), (86, 47), (47, 3), (3, 0)], 13816.36261839956)
([(0, 63), (63, 33), (33, 19), (19, 46), (46, 26), (26, 74), (74, 59), (59, 68), (68, 13), (13, 8), (8, 79), (79, 40), (40, 20), (20, 3), (3, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 44), (44, 43), (43, 31), (31, 30), (30, 69), (69, 45), (45, 98), (98, 5), (5, 90), (90, 6), (6, 71), (71, 24), (24, 92), (92, 57), (57, 7), (7, 9), (9, 62), (62, 23), (23, 67), (67, 4), (4, 86), (86, 47), (47, 51), (51, 50), (50, 18), (18, 52), (52, 53), (53, 38), (38, 80), (80, 97), (97, 83), (83, 15), (15, 82), (82, 29), (29, 65), (65, 75), (75, 41), (41, 48), (48, 58), (58, 27), (27, 84), (84, 91), (91, 88), (88, 78), (78, 55), (55, 22), (22, 76), (76, 34), (34, 12), (12, 37), (37, 10), (10, 87), (87, 89), (89, 32), (32, 96), (96, 56), (56, 49), (49, 16), (16, 73), (73, 14), (14, 99), (99, 77), (77, 85), (85, 2), (2, 11), (11, 35), (35, 60), (60, 81), (81, 54), (54, 66), (66, 36), (36, 28), (28, 70), (70, 42), (42, 21), (21, 1), (1, 95), (95, 94), (94, 25), (25, 0)], 13497.643322648004)
([(0, 63), (63, 33), (33, 19), (19, 87), (87, 13), (13, 64), (64, 93), (93, 72), (72, 61), (61, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 99), (99, 16), (16, 73), (73, 14), (14, 40), (40, 20), (20, 58), (58, 41), (41, 91), (91, 84), (84, 27), (27, 74), (74, 26), (26, 46), (46, 68), (68, 59), (59, 8), (8, 51), (51, 88), (88, 52), (52, 97), (97, 24), (24, 71), (71, 78), (78, 18), (18, 50), (50, 80), (80, 55), (55, 22), (22, 76), (76, 34), (34, 38), (38, 2), (2, 11), (11, 35), (35, 60), (60, 77), (77, 85), (85, 53), (53, 79), (79, 62), (62, 9), (9, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 47), (47, 82), (82, 15), (15, 83), (83, 29), (29, 65), (65, 54), (54, 81), (81, 30), (30, 43), (43, 31), (31, 25), (25, 44), (44, 10), (10, 37), (37, 95), (95, 1), (1, 5), (5, 90), (90, 6), (6, 45), (45, 28), (28, 69), (69, 21), (21, 42), (42, 70), (70, 66), (66, 36), (36, 98), (98, 94), (94, 75), (75, 48), (48, 86), (86, 92), (92, 3), (3, 12), (12, 0)], 12980.57645493689)
([(0, 63), (63, 33), (33, 19), (19, 8), (8, 79), (79, 54), (54, 81), (81, 78), (78, 18), (18, 55), (55, 22), (22, 86), (86, 67), (67, 4), (4, 23), (23, 43), (43, 31), (31, 30), (30, 44), (44, 74), (74, 26), (26, 59), (59, 68), (68, 12), (12, 13), (13, 14), (14, 73), (73, 16), (16, 99), (99, 77), (77, 85), (85, 62), (62, 10), (10, 57), (57, 7), (7, 15), (15, 83), (83, 82), (82, 29), (29, 65), (65, 97), (97, 92), (92, 51), (51, 50), (50, 93), (93, 72), (72, 61), (61, 39), (39, 17), (17, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 94), (94, 46), (46, 27), (27, 84), (84, 91), (91, 47), (47, 80), (80, 53), (53, 38), (38, 2), (2, 11), (11, 35), (35, 71), (71, 24), (24, 88), (88, 48), (48, 75), (75, 41), (41, 58), (58, 42), (42, 69), (69, 21), (21, 70), (70, 66), (66, 36), (36, 28), (28, 45), (45, 5), (5, 90), (90, 6), (6, 25), (25, 52), (52, 3), (3, 20), (20, 40), (40, 64), (64, 95), (95, 1), (1, 98), (98, 9), (9, 87), (87, 76), (76, 34), (34, 37), (37, 60), (60, 0)], 14927.558592814881)
([(0, 63), (63, 79), (79, 8), (8, 33), (33, 19), (19, 34), (34, 76), (76, 27), (27, 84), (84, 91), (91, 88), (88, 49), (49, 56), (56, 96), (96, 32), (32, 89), (89, 9), (9, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 46), (46, 26), (26, 74), (74, 43), (43, 31), (31, 30), (30, 44), (44, 25), (25, 70), (70, 42), (42, 21), (21, 69), (69, 16), (16, 73), (73, 14), (14, 99), (99, 85), (85, 93), (93, 64), (64, 72), (72, 61), (61, 39), (39, 17), (17, 50), (50, 92), (92, 97), (97, 83), (83, 71), (71, 24), (24, 80), (80, 35), (35, 11), (11, 2), (2, 38), (38, 29), (29, 51), (51, 47), (47, 6), (6, 90), (90, 5), (5, 1), (1, 45), (45, 28), (28, 10), (10, 62), (62, 87), (87, 13), (13, 59), (59, 68), (68, 77), (77, 78), (78, 18), (18, 65), (65, 15), (15, 82), (82, 53), (53, 54), (54, 81), (81, 41), (41, 48), (48, 75), (75, 86), (86, 55), (55, 52), (52, 22), (22, 94), (94, 37), (37, 95), (95, 98), (98, 58), (58, 36), (36, 66), (66, 12), (12, 3), (3, 20), (20, 40), (40, 60), (60, 0)], 15387.48307314137)
([(0, 63), (63, 13), (13, 8), (8, 68), (68, 59), (59, 57), (57, 7), (7, 23), (23, 67), (67, 4), (4, 10), (10, 37), (37, 27), (27, 84), (84, 74), (74, 26), (26, 46), (46, 87), (87, 78), (78, 18), (18, 50), (50, 80), (80, 83), (83, 85), (85, 89), (89, 32), (32, 49), (49, 56), (56, 96), (96, 99), (99, 16), (16, 73), (73, 14), (14, 76), (76, 34), (34, 22), (22, 55), (55, 97), (97, 92), (92, 88), (88, 53), (53, 38), (38, 15), (15, 2), (2, 11), (11, 35), (35, 60), (60, 17), (17, 39), (39, 93), (93, 72), (72, 61), (61, 64), (64, 54), (54, 77), (77, 41), (41, 75), (75, 48), (48, 21), (21, 42), (42, 69), (69, 66), (66, 45), (45, 98), (98, 95), (95, 9), (9, 62), (62, 86), (86, 47), (47, 40), (40, 20), (20, 3), (3, 12), (12, 1), (1, 5), (5, 90), (90, 6), (6, 36), (36, 28), (28, 91), (91, 30), (30, 44), (
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 > Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 17:52
Si vous pouvez bien me dire ce qui se passe de la 42ème à la 48ème ligne, ça serait gentil
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 18:02
ceci t'aidera peut-être à observer ce qui se passe:
import numpy
import math
import inspect
def ln():
    return inspect.currentframe().f_back.f_lineno
def distance_euclidienne_carree(villes):
    """
    Calcule la distance euclidienne entre deux points.
    """
    liste_distances = []
    print(ln(),0*"-",liste_distances)
    for i in range(len(villes)):
        liste_distances.append([])
        print(ln(),1*"-",i,liste_distances)
        for j in range(i):
            liste_distances[i].append(liste_distances[j][i])
            print(ln(),2*"-",i,j,liste_distances)
        liste_distances[i].append(numpy.inf)
        print(ln(),1*"-",i,liste_distances)
        for j in range(i+1, len(villes)):
            liste_distances[i].append(math.sqrt( ((villes[i][0]-villes[j][0])**2) +
                                                 ((villes[i][1]-villes[j][1])**2) ))
            print(ln(),2*"-",i,j,liste_distances)
    distances = numpy.array(liste_distances)
    return distances
v=[[1,2],[3,4]]
d=distance_euclidienne_carree(v)
print("RESULTAT",d)
# v=[[1,2],[3,4],[5,6]]
# d=distance_euclidienne_carree(v)
# print("RESULTAT",d)
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
26 nov. 2020 à 18:13
bah j'obtiens ça comme résultat et ça ne m'avance pas du tout
18 []
21 - 0 [[]]
26 - 0 [[inf]]
30 -- 0 1 [[inf, 2.8284271247461903]]
21 - 1 [[inf, 2.8284271247461903], []]
24 -- 1 0 [[inf, 2.8284271247461903], [2.8284271247461903]]
26 - 1 [[inf, 2.8284271247461903], [2.8284271247461903, inf]]
RESULTAT [[ inf 2.82842712]
[2.82842712 inf]]
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
26 nov. 2020 à 18:15
ceci fait la même chose, peut-être plus facile à comprendre:
def distance_euclidienne_carree(villes):
    """
    Calcule la distance euclidienne entre deux points.
    """
    nvilles=len(villes)
    liste_distances = numpy.full((nvilles, nvilles), numpy.inf)
    for i in range(nvilles):
        for j in range(i):
            dist=math.sqrt( ((villes[i][0]-villes[j][0])**2) +
                                ((villes[i][1]-villes[j][1])**2) )
            liste_distances[j][i]=dist
            liste_distances[i][j]=dist
    distances = numpy.array(liste_distances)
    return distances
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
26 nov. 2020 à 20:10
Peux-tu m'expliquer stp ce que veut dire liste_distances = numpy.full((nvilles, nvilles), numpy.inf)?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2020 à 20:11
je pense que tu apprendras mieux, et deviendras plus autonome, en faisant par toi-même quelques recherches et quelques tests.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
29 nov. 2020 à 12:51
peux-tu donner suite, ou marquer cette discussion comme résolue?
0