#pragma once
#include<utility>namespacehaar_lib{template<typenameM,typenameT=typenameM::value_type>Tdeterminant(Mm){constintN=m.size();ints=0;for(inti=0;i<N;++i){if(m[i][i]==0){for(intj=i+1;j<N;++j){if(m[j][i]!=0){std::swap(m[i],m[j]);(s+=1)%=2;break;}if(j==N-1)return0;}}for(intj=i+1;j<N;++j){Tt=m[j][i]/m[i][i];for(intk=0;k<N;++k)m[j][k]-=m[i][k]*t;}}Tret=s?-1:1;for(inti=0;i<N;++i)ret*=m[i][i];returnret;}}// namespace haar_lib