import math
done = 0
f, inv = [], []
class Solution:
M = 10**9 + 7
def bestNumbers(self, N, A, B, C, D):
global done, f, inv
if not done:
self.pre()
if A == B:
s = N * A
flag = False
while s > 0:
if s % 10 == C or s % 10 == D:
flag = True
break
s //= 10
if flag:
return 1
return 0
ans = 0
for i in range(N + 1):
s = i * A + (N - i) * B
flag = False
while s > 0:
if s % 10 == C or s % 10 == D:
flag = True
break
s //= 10
if flag:
ans = (ans + self.nCr(N, i)) % self.M
return ans
def pre(self):
global done, f, inv
done = 1
f = [1] * (10**5 + 1)
inv = [0] * (10**5 + 1)
for i in range(2, 10**5 + 1):
f[i] = (f[i - 1] * i) % self.M
inv[10**5] = pow(f[10**5], self.M - 2, self.M)
for i in range(10**5 - 1, -1, -1):
inv[i] = (inv[i + 1] * (i + 1)) % self.M
def nCr(self, n, r):
return (((f[n] * inv[n - r]) % self.M) * inv[r]) % self.M
# Driver's code
if __name__ == '__main__':
obj = Solution()
N, A, B, C, D = 2, 1, 2, 3, 5
print(obj.bestNumbers(N, A, B, C, D))