from itertools import (accumulate, chain)
from operator import mul
# factorial :: Integer
def factorial(n):
return list(
accumulate(chain([1], range(1, 1 + n)), mul)
)[-1]