#include #include #include #include #include #include #include #include #include #include #include #include #include #define repd(i,a,b) for (int i=(a);i<(b);i++) #define rep(i,n) repd(i,0,n) #define var auto #define mod 1000000007 #define mod2 1000000009 #define inf 2147483647 #define mp make_pair #define pb push_back typedef long long ll; using namespace std; template inline void output(T a, int p) { if(p){ cout << fixed << setprecision(p) << a << "\n"; } else{ cout << a << "\n"; } } // end of template vector>> sum_of_digits(string s){ int sz = (int)s.size(); reverse(s.begin(), s.end()); vector>> dp(sz + 1, vector>(sz * 9 + 1, vector(2, 0))); dp[0][0][0] = 1; rep(i, sz){ int n = s[i] - '0'; rep(j, sz * 9 + 1){ rep(k, 10){ if(j + k > sz * 9) continue; if (k < n) { dp[i + 1][j + k][0] += dp[i][j][0] + dp[i][j][1]; } else if (k == n){ dp[i + 1][j + k][0] += dp[i][j][0]; dp[i + 1][j + k][1] += dp[i][j][1]; } else{ dp[i + 1][j + k][1] += dp[i][j][0] + dp[i][j][1]; } dp[i + 1][j + k][0] %= mod2; dp[i + 1][j + k][1] %= mod2; } } } return dp; } int main() { cin.tie(0); ios::sync_with_stdio(0); // source code string m, d; cin >> m >> d; var dpm = sum_of_digits(m); var dpd = sum_of_digits(d); ll ans = 0; repd(i, 1, min(m.size(), d.size()) * 9){ ans += dpm[m.size()][i][0] * dpd[d.size()][i][0]; ans %= mod2; } output(ans, 0); return 0; }