#include #include #include #include using namespace std; const int MOD = 500500573; class ProductAndSum { private: long long fact[2501]; long long ones[2501]; long long mpw[2501]; long long modpow(int a, int p){ long long res = 1, mul= a; while(p){ if(p&1) res = (res*mul)%MOD; mul = (mul*mul)%MOD; p /= 2; } return res; } int calc(vector &p, int S){ int cnt = 0, res = S; for(int i=1;i<=9;i++) cnt += p[i]; res = (res*fact[cnt-1])%MOD; res = (res*ones[cnt])%MOD; for(int i=1;i<=9;i++) res = (res*mpw[p[i]])%MOD; return res; } public: int getSum(int p2, int p3, int p5, int p7, int S) { fact[0] = 1; for(int i=1;i<=2500;i++) fact[i] = (fact[i-1]*i)%MOD; ones[0] = 0; for(int i=1;i<=2500;i++) ones[i] = (10*ones[i-1]+1)%MOD; for(int i=0;i<=2500;i++) mpw[i] = modpow(fact[i], MOD-2); vector s(10,0); s[5] = p5; s[7] = p7; int res = 0; int cnt = 0; for(s[8]=0;3*s[8]<=p2;s[8]++){ for(s[9]=0;2*s[9]<=p3;s[9]++){ for(s[4]=0;2*s[4]+3*s[8]<=p2;s[4]++){ for(s[6]=0;s[6]+2*s[4]+3*s[8]<=p2 && s[6]+2*s[9]<=p3;s[6]++){ s[2] = p2 - 2*s[4] - s[6] - 3*s[8]; s[3] = p3 - s[6] - 2*s[9]; s[1] = S; for(int i=2;i<=9;i++) s[1] -= i*s[i]; if(s[1] < 0) continue; cout << ++cnt << endl; res += calc(s, S); res %= MOD; } } } } return res; } };