Python example

"""
ID: ***
LANG: PYTHON3
TASK: wormhole
"""
fin = open ('wormhole.in', 'r')
fout = open ('wormhole.out', 'w')
N = int(fin.readline())
total_List = list()
def checkPairings(listGenrt,crd):
    for i in range(len(crd)):#assign starting point
        sPt = crd[i]
        lG = list(listGenrt)
        org = list(sPt)
        nXt = []
        num = 0
        while(True):#checking solutions of this starting point
            for tpl in listGenrt:
                if sPt in tpl:
                    sPt = tpl[0 if tpl.index(sPt) == 1 else 1]
                    if tpl in lG:
                        lG.remove(tpl)

            for x in crd:
                if x[1] == sPt[1] and x != sPt and x[0] > sPt[0]:
                    if nXt==[] or (nXt!=[] and x[0] < nXt[0]):
                        nXt =  x

            if(nXt==[]):#can't find wh with the same Y value
                break
            sPt = list(nXt)
            nXt = []
            if sPt == org and len(lG)!=len(listGenrt):
                num+=1
                break

        if num!=0:
            total_List.append(listGenrt)
            break

def createPairings(remaining):
    if len(remaining)==0:
        return

    for x in range(1,len(remaining)):
        if(x>1):
            P2 = list(pairings)
            #print("---{}".format(P2))
            checkPairings(P2,crd)

            del pairings[(len(P2)-int(len(remaining)/2)):len(P2)]

        pairings.append((remaining[0], remaining[x]))
        p = list(remaining)
        p.pop(0)
        p.pop(x-1)
        createPairings(p)
        if(x==len(remaining)-1 and len(pairings)==len(remaining)/2):
            checkPairings(pairings,crd)

crd = list()
pairings = list()
for x in range(N):
    c = list(map(int,fin.readline().split()))
    crd.append(c)
#print(crd)
createPairings(crd)
fout.write("{}\n".format(str(len(total_List))))
fout.close()