# Digit Multiplication By K Solution Codechef

## Digit Multiplication By K Solution Codechef

There is a strange game played in ChefLand. The game starts with N white balls, the i-th of which has a power of Si. It is known that 0≤Si≤9. On each level, a black ball with power K hits each of the white balls. After the collision, the power of each white ball is multiplied by K.

However, white balls are only allowed to have single-digit power. In order to maintain this, a white ball whose power contains multiple digits splits into several white balls with single-digit power, one per digit.

For example, consider a white ball with a power of 4.

• If K=2, its resulting power is 88 and it remains a single ball.
• If K=13, its resulting power is 52, so it splits into two white balls with power 5 and 2 respectively.
• If K=27, its resulting power is 108, so it splits into three white balls with power 1, 0, and 8 respectively.

The aim of the game is to determine the number of white balls after M levels. Note that K remains the same for every level.

Input Format

• The first line of input contains a single integer T, denoting the number of test cases. The description of T test cases follows.
• The first line of each test case contains three space-separated integers N, K, and M.
• The second line of each test case contains a string S of length N, where Si is the initial power of i-th ball.

Output Format

For each test case, output in a single line the number of white balls at the end of the game, modulo 109+7.

Constraints

• 1≤T≤100
• 1≤N≤1000
• 0≤K,M≤109

Subtask #1 (100 points): Original constraints

Sample Input 1

``````3
4 9 2
5418
5 63 3
40514
1 100000 100000
0``````

Sample Output 1

``````14
88
1``````

Explanation

Test case 1:

• Initially S=5418
• After the 1st, level S=4536972
• After the 2nd level, S=36452754816318

There are 14 white balls, so the answer is 14.

Test case 3: After each level, S=0. So, the answer is 1.

### SOLUTION

Program: Digit Multiplication By K Solution in Python

``````import numpy as np
nmax = 1000000007
t = int(input())
for i in range(t):
mat = np.zeros((10,10))
mat = mat.astype(int)
n,k,m = map(int, input().split())
if m == 0:
print(n)
input()
continue
for j in range(10):
for v in map(int, list(str(j*k))):
mat[v,j] += 1
mats = [mat]
for j in range(int(np.log2(m))):
mat = (mat@mat)%nmax
mats.append(mat)
fmat = np.identity(10)
fmat = fmat.astype(int)
j = 0
while m>0:
if m%2==1:
fmat = (fmat@mats[j])%nmax
m = m//2
j += 1
vec = np.zeros((10,1))
vec = vec.astype(int)
for v in map(int, list(input())):
vec[v,0] += 1
outvec = (fmat@vec)%nmax
print(sum(sum(outvec)%nmax))``````