#include using namespace std; #define rep(i,n) for(int i=0;i=0;--i) #define debug(output) if(debugFlag)cout<<#output<<"= "< P; const bool debugFlag=true; const lint linf=1.1e18;const int inf=1.01e9; constexpr int MOD=1000000007; templatebool chmax(T &a, const T &b) { if(a < b){ a = b; return 1; } return 0; } templatebool chmin(T &a, const T &b) { if(a > b){ a = b; return 1; } return 0; } #include using namespace atcoder; using mint = modint998244353; template struct Binom{ long long n; bool flag=false; vector kaijo,inv_kaijo; Binom(int N){ n=N; kaijo.push_back(1); for(long long i=1;i<=n;i++){ kaijo.push_back((kaijo[i-1]*i)); } } void invList(){ inv_kaijo.push_back(1); flag=true; for(int i=1;i<=n;++i){ inv_kaijo.push_back(1/kaijo[i]); } } T binom(long long N,long long K){ if(N<0||K<0)return 0; if(N>n; vector a; rep(i,9)a.push_back(i); a.push_back(8); for(int i=9;i<98;++i)a.push_back(i); a.push_back(97); for(int i=98;i<=200;++i)a.push_back(i); vector> dp(n+1,vector(n,0)); dp[0][0]=1; Binom binom(n+1000); binom.invList(); for(auto& x:a){ auto ndp=dp; rep(i,n){ rep1(j,n){ if(i+j>n)break; if(x*j>=n)break; rep(k,n){ if(k+x*j>=n)break; ndp[i+j][k+x*j]+=dp[i][k]*binom.binom(n-i,j); } } } swap(dp,ndp); } cout<