#pragma once
#include<array>namespacehaar_lib{template<typenameMonoid,intB>structarray_monoid{usingvalue_type=std::array<typenameMonoid::value_type,B>;conststaticMonoidM;value_typeoperator()()const{value_typeret;ret.fill(M());returnret;}value_typeoperator()(constvalue_type&a,constvalue_type&b)const{value_typeret;for(inti=0;i<B;++i)ret[i]=M(a[i],b[i]);returnret;}};}// namespace haar_lib