interface IMonoid<T> { static T Zero{get;} static T operator+(T t1, T t2) static T operator*(T t1, T t2) }