#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll mod = 1000000009; #define rep(i,n) for(int i=0;i=0;i--) #define all(x) (x).begin(),(x).end() //最大 = 9*199(Nは最大200桁) const int SUM_MAX = 2000; vector calc(string N) { // dp[ 決めた桁数 ][ 未満フラグ ][ 問題に応じての処理 ] := 総数 vector>> dp(N.size() + 1, vector>(2, vector(SUM_MAX, 0))); dp[0][0][0] = 1; rep(i, N.size()) { int D = N[i] - '0'; rep(j, 2) { rep(k, SUM_MAX) { reple(d, 0, (j ? 9 : D)) { int sum = k + d; if (sum >= SUM_MAX) break; dp[i + 1][j || (d < D)][sum] += dp[i][j][k]; dp[i + 1][j || (d < D)][sum] %= mod; } } } } vector ret(SUM_MAX, 0); rep(i, SUM_MAX) { ret[i] += dp[N.size()][0][i] + dp[N.size()][1][i]; ret[i] %= mod; } return ret; } int main() { string M, D; cin >> M >> D; vector dpM = calc(M); vector dpD = calc(D); ll count = 0; //合計は1以上 repl(i, 1, SUM_MAX) { count += (dpM[i] * dpD[i]) % mod; count %= mod; } cout << count << endl; return 0; }