generalized factorial