// ROOT : DRAGON3012009 : WA in Real Life
#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 1000001
#define INF (1ll<<30)
#define NAME "file"
using namespace std;
ll n, m, q ;
ll dp[20][2][2][ (1 << 10) + 1 ][11] ;
string L, R ;
ll add(ll a, ll b ) {
return a + b >= M ? a + b - M : a + b ;
}
ll sub(ll a, ll b ) {
return a - b < 0 ? a - b + M : a - b ;
}
ll DP(ll pos, ll lower, ll start, ll mask, ll sum, ll so_phan_biet, string &x ) {
if(pos >= x.size() ) {
return start && __builtin_popcount(mask ) == so_phan_biet && (sum % so_phan_biet == 0 ) ;
}
ll &cur = dp[pos][lower][start][mask][sum] ;
if(cur != - 1 ) return cur ;
cur = 0 ;
ll limit = lower ? x[pos] - '0' : 9 ;
FOR(i, 0, limit ) {
ll nxt_start = start || i != 0 ;
ll nxt_sum = sum ;
ll nxt_mask = mask ;
if(nxt_start ) {
nxt_mask |= (1 << i ) ;
nxt_sum = ((nxt_sum) * 10 + i ) % so_phan_biet ;
}
cur += DP(pos + 1, lower && i == limit, nxt_start, nxt_mask, nxt_sum, so_phan_biet, x ) ;
}
return cur ;
}
void init() {
ll x;
cin >> x >> R ;
x -- ;
L = to_string(x) ;
L = " " + L ;
R = " " + R ;
}
void solve() {
ll ans = 0 ;
FOR(gg , 1, 10 ) {
memset(dp, -1, sizeof dp ) ;
ll temp = DP(1, 1, 0, 0, 0, gg , R ) ;
memset(dp, -1, sizeof dp ) ;
temp = sub(temp,DP(1, 1, 0, 0, 0, gg , L ) ) ;
ans = add(ans, temp ) ;
}
cout << ans << el ;
}
_ROOT_ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1; // cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkgOiBXQSBpbiBSZWFsIExpZmUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBfUk9PVF8gaW50IG1haW4oKQojZGVmaW5lIE0gMTAwMDAwMDAwNwojZGVmaW5lIE1BWE4gMTAwMDAwMQojZGVmaW5lIElORiAoMWxsPDwzMCkKI2RlZmluZSBOQU1FICJmaWxlIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbGwgbiwgbSwgcSA7CmxsIGRwWzIwXVsyXVsyXVsgKDEgPDwgMTApICsgMSBdWzExXSA7CnN0cmluZyBMLCBSIDsKCmxsIGFkZChsbCBhLCBsbCBiICkgewogICAgcmV0dXJuIGEgKyBiID49IE0gPyBhICsgYiAtIE0gOiBhICsgYiA7Cn0KbGwgc3ViKGxsIGEsIGxsIGIgKSB7CiAgICByZXR1cm4gYSAtIGIgPCAwID8gYSAtIGIgKyBNIDogYSAtIGIgOwp9CgpsbCBEUChsbCBwb3MsIGxsIGxvd2VyLCBsbCBzdGFydCwgbGwgbWFzaywgbGwgc3VtLCBsbCBzb19waGFuX2JpZXQsIHN0cmluZyAmeCAgKSB7CiAgICBpZihwb3MgPj0geC5zaXplKCkgKSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0ICYmIF9fYnVpbHRpbl9wb3Bjb3VudChtYXNrICkgPT0gc29fcGhhbl9iaWV0ICYmIChzdW0gJSBzb19waGFuX2JpZXQgPT0gMCApIDsKICAgIH0KICAgIGxsICZjdXIgPSBkcFtwb3NdW2xvd2VyXVtzdGFydF1bbWFza11bc3VtXSA7CiAgICBpZihjdXIgIT0gLSAxICkgcmV0dXJuIGN1ciA7CiAgICBjdXIgPSAwIDsKICAgIGxsIGxpbWl0ID0gbG93ZXIgPyB4W3Bvc10gLSAnMCcgOiA5IDsKICAgIEZPUihpLCAwLCBsaW1pdCApIHsKICAgICAgICBsbCBueHRfc3RhcnQgPSBzdGFydCB8fCBpICE9IDAgOwogICAgICAgIGxsIG54dF9zdW0gPSBzdW0gOwogICAgICAgIGxsIG54dF9tYXNrID0gbWFzayA7CiAgICAgICAgaWYobnh0X3N0YXJ0ICkgewogICAgICAgICAgICBueHRfbWFzayB8PSAoMSA8PCBpICkgOwogICAgICAgICAgICBueHRfc3VtID0gKChueHRfc3VtKSAqIDEwICsgaSApICUgc29fcGhhbl9iaWV0IDsKICAgICAgICB9CiAgICAgICAgY3VyICs9IERQKHBvcyArIDEsIGxvd2VyICYmIGkgPT0gbGltaXQsIG54dF9zdGFydCwgbnh0X21hc2ssIG54dF9zdW0sIHNvX3BoYW5fYmlldCwgeCApIDsKICAgIH0KICAgIHJldHVybiBjdXIgOwp9Cgp2b2lkIGluaXQoKSB7CiAgICBsbCB4OwogICAgY2luID4+IHggPj4gUiA7CiAgICB4IC0tIDsKICAgIEwgPSB0b19zdHJpbmcoeCkgOwogICAgTCA9ICIgIiArIEwgOwogICAgUiA9ICIgIiArIFIgOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgbGwgYW5zID0gMCA7CiAgICBGT1IoZ2cgLCAxLCAxMCApIHsKICAgICAgICBtZW1zZXQoZHAsIC0xLCBzaXplb2YgZHAgKSA7CiAgICAgICAgbGwgdGVtcCA9IERQKDEsIDEsIDAsIDAsIDAsIGdnICwgUiApICA7CiAgICAgICAgbWVtc2V0KGRwLCAtMSwgc2l6ZW9mIGRwICkgOwogICAgICAgIHRlbXAgPSBzdWIodGVtcCxEUCgxLCAxLCAwLCAwLCAwLCBnZyAsIEwgKSApIDsKICAgICAgICBhbnMgPSBhZGQoYW5zLCB0ZW1wICkgOwogICAgfQogICAgY291dCA8PCBhbnMgPDwgZWwgOwp9CgpfUk9PVF8gewogICAgLy8gZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwogICAgLy8gZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7IC8vIGNpbiA+PiB0IDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuICgwJjApOwp9Cg==