distribute and factor