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()