← Home
write a go solution for Description:
We start with a string s consisting only of the digits 1, 2, or 3. The length of s is denoted by |s|. For each i from 1 to |s|, the i-th character of s is denoted by s_i.

There is one cursor. The cursor's location ell is denoted by an integer in 0,ldots,|s|, with the following meaning:

- If ell=0, then the cursor is located before the first character of s.
- If ell=|s|, then the cursor is located right after the last character of s.
- If 0<ell<|s|, then the cursor is located between s_ell and s_ell+1.

We denote by s_ the string to the left of the cursor and s_ the string to the right of the cursor.

We also have a string c, which we call our clipboard, which starts out as empty. There are three types of actions:

- The Move action. Move the cursor one step to the right. This increments ell once.
- The Cut action. Set carrows_, then set sarrows_.
- The Paste action. Append the value of c to the end of the string s. Note that this doesn't modify c.

The cursor initially starts at ell=0. Then, we perform the following procedure:

1. Perform the Move action once.
2. Perform the Cut action once.
3. Perform the Paste action s_ell times.
4. If ell=x, stop. Otherwise, return to step 1.

You're given the initial string s and the integer x. What is the length of s when the procedure stops? Since this value may be very large, only find it modulo 10^9+7.

It is guaranteed that ell<=|s| at any time.

Input Format:
The first line of input contains a single integer t (1<=t<=1000) denoting the number of test cases. The next lines contain descriptions of the test cases.

The first line of each test case contains a single integer x (1<=x<=10^6). The second line of each test case consists of the initial string s (1<=|s|<=500). It is guaranteed, that s consists of the characters "1", "2", "3".

It is guaranteed that the sum of x in a single file is at most 10^6. It is guaranteed that in each test case before the procedure will stop it will be true that ell<=|s| at any time.

Output Format:
For each test case, output a single line containing a single integer denoting the answer for that test case modulo 10^9+7.

Note:
Let's illustrate what happens with the first test case. Initially, we have s= 231. Initially, ell=0 and c=varepsilon (the empty string). The following things happen if we follow the procedure above:

- Step 1, Move once: we get ell=1.
- Step 2, Cut once: we get s= 2 and c= 31.
- Step 3, Paste s_ell= 2 times: we get s= 23131.
- Step 4: ell=1not=x=5, so we return to step 1.
- Step 1, Move once: we get ell=2.
- Step 2, Cut once: we get s= 23 and c= 131.
- Step 3, Paste s_ell= 3 times: we get s= 23131131131.
- Step 4: ell=2not=x=5, so we return to step 1.
- Step 1, Move once: we get ell=3.
- Step 2, Cut once: we get s= 231 and c= 31131131.
- Step 3, Paste s_ell= 1 time: we get s= 23131131131.
- Step 4: ell=3not=x=5, so we return to step 1.
- Step 1, Move once: we get ell=4.
- Step 2, Cut once: we get s= 2313 and c= 1131131.
- Step 3, Paste s_ell= 3 times: we get s= 2313113113111311311131131.
- Step 4: ell=4not=x=5, so we return to step 1.
- Step 1, Move once: we get ell=5.
- Step 2, Cut once: we get s= 23131 and c= 13113111311311131131.
- Step 3, Paste s_ell= 1 times: we get s= 2313113113111311311131131.
- Step 4: ell=5=x, so we stop.

At the end of the procedure, s has length 25.. Output only the code with no comments, explanation, or additional text.