#pragma once
#include<array>namespacehaar_lib{template<size_tN>structtransformation_monoid{usingvalue_type=std::array<int,N>;value_typeoperator()()const{value_typeret;for(inti=0;i<(int)N;++i)ret[i]=i;returnret;}value_typeoperator()(constvalue_type&a,constvalue_type&b)const{value_typeret;for(inti=0;i<(int)N;++i)ret[i]=a[b[i]];returnret;}};}// namespace haar_lib