#!/usr/bin/env python3
import numpy as np
import csv
import itertools
import math

import scipy.special

#o(n) = (n-1) * o(n-2)  <- pairs
def number_pairs(size):
    if size<2:
        return 1
    n=size-1
    return n*number_pairs(size-2)


#https://stackoverflow.com/questions/5360220/how-to-split-a-list-into-pairs-in-all-possible-ways
def all_pairs(lst):
    if len(lst) < 2:
        yield lst
        return
    a = lst[0]
    for i in range(1,len(lst)):
        pair = (a,lst[i])
        for rest in all_pairs(lst[1:i]+lst[i+1:]):
            yield [pair] + rest

def all_triples(lst):
    if len(lst) < 3:
        yield lst
        return
    a = lst[0]
    for i in range(1,len(lst)):
        for j in range(i+1,len(lst)):
            pair = (a,lst[i],lst[j])
            for rest in all_triples(lst[1:i]+lst[i+1:j]+lst[j+1:]):
                yield [pair] + rest

def all_quadruples(lst):
    if len(lst) < 4:
        yield lst
        return
    a = lst[0]
    for i in range(1,len(lst)):
        for j in range(i+1,len(lst)):
            for k in range(j+1,len(lst)):
                pair = (a,lst[i],lst[j],lst[k])
                for rest in all_quadruples(lst[1:i]+lst[i+1:j]+lst[j+1:k]+lst[k+1:]):
                    yield [pair] + rest






#a=[1,2,3,4]
a=[1,2,3,4,5,6]

print(number_pairs(24))


count=0
for i in all_pairs(a):
    count+=1
    #print(i)

print(count)
