change reduceLeft(_ * _) to product