import
java.io.*;
import
java.util.*;
class
GFG {
static
final
int
MOD = (
int
)1e9 +
7
;
static
int
dp[][][][];
static
void
memset(
int
[][][][] dp)
{
for
(
int
i =
0
; i <
21
; i++) {
dp[i] =
new
int
[
21
][
10
][
190
];
for
(
int
j =
0
; j <
21
; j++) {
for
(
int
k =
0
; k <
10
; k++) {
Arrays.fill(dp[i][j][k], -
1
);
}
}
}
}
static
int
recur(
int
i,
int
j,
int
k,
int
sum,
int
T,
char
a[])
{
if
(i == a.length) {
if
(sum == T) {
return
1
;
}
else
{
return
0
;
}
}
if
(dp[i][j][k][sum] != -
1
) {
return
dp[i][j][k][sum];
}
int
ans =
0
;
if
(i ==
0
) {
for
(
int
l =
0
; l <= (a[j] -
'0'
); l++) {
if
(l == (a[j] -
'0'
)) {
ans += recur(i +
1
, j +
1
, l, sum + l,
T, a);
}
else
{
ans += recur(i +
1
, j, l, sum + l, T,
a);
}
}
}
else
{
if
(sum ==
0
) {
for
(
int
l =
0
; l <=
9
; l++) {
ans += recur(i +
1
, j, l, sum + l, T,
a);
}
}
else
{
for
(
int
l =
0
; l <=
9
; l++) {
if
(j == i) {
if
(l <= (a[j] -
'0'
) && l != k) {
if
(l == (a[j] -
'0'
)) {
ans += recur(i +
1
, j +
1
,
l, sum + l, T,
a);
}
else
{
ans += recur(i +
1
, j, l,
sum + l, T, a);
}
}
}
else
if
(l != k) {
ans += recur(i +
1
, j, l, sum + l,
T, a);
}
}
}
}
return
dp[i][j][k][sum] = ans;
}
static
int
countInRange(
int
T,
int
A,
int
B)
{
dp =
new
int
[
21
][
21
][
10
][
190
];
memset(dp);
String L = Integer.toString(A -
1
);
String R = Integer.toString(B);
int
ans1 = recur(
0
,
0
,
0
,
0
, T, L.toCharArray());
memset(dp);
int
ans2 = recur(
0
,
0
,
0
,
0
, T, R.toCharArray());
return
ans2 - ans1;
}
public
static
void
main(String[] args)
{
int
T =
5
, A =
1
, B =
100
;
System.out.println(countInRange(T, A, B));
int
T1 =
5
, A1 =
1
, B1 =
100000000
;
System.out.println(countInRange(T1, A1, B1));
}
}