SemiGroup and Monoid