#pragma once
template<classT>voidHadamardTransform(vector<T>&f,boolinv=false){intn=f.size();assert((n&(n-1))==0);for(inti=1;i<n;i<<=1){for(intj=0;j<n;j++){if((j&i)==0){Tx=f[j],y=f[j|i];f[j]=x+y,f[j|i]=x-y;}}}if(inv){ifconstexpr(is_integral<T>::value){for(auto&x:f)x/=n;}else{Tinvn=T(1)/T(f.size());for(auto&x:f)x*=invn;}}}