ll n,s; map f(ll n){ mapsrc,dst; src[0]=1; rep(n){ ll@a; for(auto t:src){ for(ll b=a;t.first+b<=s;b*=a){ dst[t.first+b]+=t.second; } } swap(src,dst); dst.clear(); } return src; } { rd(n,s); auto z1=f(n/2); auto z2=f(n-n/2); ll m=0,z=0,y=0; auto t1=z1.begin(); auto t2=z2.rbegin(); for(;t2!=z2.rend();){ if(t1!=z1.end() && t1->first+t2->first<=s){ m+=t1->second; ++t1; } else{ z+=m*t2->second; ++t2; } } wt(z); }