#include #include using namespace std; using i64 = long long; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x f(string s) { int p = s.size(); vector>> dp(p+1, vector>(2, vector(N+20))); dp[0][0][0] = 1; for(int i : range(p)) { for(int j : range(2)) { for(int x : range(N)) { for(int d : range(j?10:s[i]-'0'+1)) { int flag = j | d < s[i] - '0'; dp[i+1][flag][x+d] += dp[i][j][x]; dp[i+1][flag][x+d] %= mod; } } } } vector res(N); for(int x : range(N)) { res[x] += dp[p][0][x] + dp[p][1][x]; } res[0]--; return res; } int main(void) { string m, d; cin >> m >> d; vector res0 = f(m), res1 = f(d); i64 res = 0; for(int x : range(N)) { res += res0[x] * res1[x] % mod; res %= mod; } cout << res << endl; return 0; }