from __future__ import print_function import re import fileinput dist = {} visited = set() def computeMinDistance(startPoint): visited.add(startPoint) if len(dist) == len(visited): maximum = 0 minimum = 0 else: minimum = None maximum = 0 for i in dist[startPoint]: if i in visited: continue shortest, longest = computeMinDistance(i) if shortest is not None: shortest += dist[startPoint][i] longest += dist[startPoint][i] if minimum is None: minimum = shortest maximum = longest else: minimum = min(minimum, shortest) maximum = max(maximum, longest) visited.remove(startPoint) return minimum, maximum linePattern = re.compile(r"(\w+) to (\w+) = (\d+)") for line in fileinput.input(): match = linePattern.match(line) if match.group(1) not in dist: dist[match.group(1)] = {} if match.group(2) not in dist: dist[match.group(2)] = {} dist[match.group(1)][match.group(2)] = int(match.group(3)) dist[match.group(2)][match.group(1)] = int(match.group(3)) minimum = None possible = [] for i in dist: shortest, longest = computeMinDistance(i) if shortest is not None: possible.append(shortest) possible.append(longest) print("Shortest path is", min(possible)) print("Longest path is", max(possible))