Wormholes

import itertools

def getGroups(points):
   if len(points) == 2:
      return [[[points[0],points[1]]]]
   res = []
   for i in range(1,len(points)):
      perm = [[points[0],points[i]]]
      l = getGroups(points[1:i]+points[i+1:])
      [res.append(perm+g) for g in l]
   return res

def isCycle(uniqueGroups, numPoints):
   cycles = 0
   for arrangement in uniqueGroups:
      arrangementIsCycle = False
      for wormhole in arrangement:
            if arrangementIsCycle:
               break
            for startPos in range(2):
               cowPos = wormhole[startPos]
               if arrangementIsCycle:
                  break
               for _ in range(numPoints):
                  minDistance = float('inf')
                  nextPosition = False
                  for possibleNext in arrangement:
                        if possibleNext[0][1] == cowPos[1] and possibleNext[0][0] > cowPos[0]:
                           if possibleNext[0][0] - cowPos[0] < minDistance:
                              minDistance = possibleNext[0][0] - cowPos[0]
                              nextPosition = possibleNext[1]
                        if possibleNext[1][1] == cowPos[1] and possibleNext[1][0] > cowPos[0]:
                           if possibleNext[1][0] - cowPos[0] < minDistance:
                              minDistance = possibleNext[1][0] - cowPos[0]
                              nextPosition = possibleNext[0]
                  if nextPosition:
                        cowPos = nextPosition
                  else:
                        break
                  if wormhole[startPos] == cowPos:
                        arrangementIsCycle = True
                        break
      if arrangementIsCycle:
            cycles += 1
   return cycles

def parseInput(filename):
   wormholes = []
   with open(filename,'r') as fIn:
      for i in fIn.readlines()[1:]:
            wormholes.append(list(map(int,i.split())))
   return wormholes

def main():
   points = parseInput('wormhole.in')
   numPoints = len(points)
   uniqueGroups = getGroups(points)
   print(len(uniqueGroups))
   res = isCycle(uniqueGroups,numPoints)
   print(res)
   with open('wormhole.out','w') as fOut:
      fOut.write(str(res)+'\n')

if __name__ == '__main__':
   main()