refactoring
refactoring
added product semigroup