#pragma once
#include<vector>namespacehaar_lib{template<typenameT,constauto&convolve>std::vector<T>stirling_number_of_second_kind_fft(intN){std::vector<T>a(N+1),b(N+1);std::vector<int>m(N+1,0);for(inti=2;i<=N;++i){if(m[i]!=0)continue;for(intj=2*i;j<=N;j+=i){m[j]=i;}}for(inti=0;i<=N;++i){if(m[i]==0){a[i]=T::pow(i,N);}else{a[i]=a[m[i]]*a[i/m[i]];}}Tf=1;for(inti=1;i<=N;++i)f*=i;f=f.inv();for(inti=N;i>=0;--i){a[i]*=f;b[i]=f;f*=i;if(i%2==1){b[i]=-b[i];}}autoret=convolve(a,b);ret.resize(N+1);returnret;}}// namespace haar_lib