luogu#P9888. [ICPC2018 Qingdao R] Magic Multiplication

[ICPC2018 Qingdao R] Magic Multiplication

题目描述

BaoBao is now learning a new binary operation between two positive integers, represented by \otimes, in his magic book. The book tells him that the result of such operation is calculated by concatenating all multiple results of each digit in the two integers.

Formally speaking, let the first integer be A=a1a2anA = a_1a_2 \dots a_n, where aia_i indicates the ii-th digit in AA, and the second integer be B=b1b2bmB = b_1b_2 \dots b_m, where bib_i indicates the ii-th digit in BB. We have

$$A \otimes B = \sum\limits_{i=1}^n\sum\limits_{j=1}^m a_ib_j = a_1b_1 + a_1b_2 + \dots + a_1b_m + a_2b_1 + \dots + a_nb_m $$

Note that the result of aibja_ib_j is considered to be a string\textbf{string} (without leading zeros if aibj>0a_ib_j > 0, or contains exactly one 0 if aibj=0a_ib_j = 0), NOT a normal integer. Also, the sum here means string concatenation\textbf{string concatenation}, NOT the normal addition operation.

For example, 2345=810121523 \otimes 45 = 8101215. Because 8=2×48=2 \times 4, 10=2×510=2 \times 5, 12=3×412=3 \times 4 and 15=3×515=3 \times 5.

BaoBao is very smart and soon knows how to do the inverse operation of \otimes. Now he gives you the result of a \otimes operation and the numbers of digits in the two original integers. Please help him to restore the two original integers AA and BB.

输入格式

There are multiple test cases. The first line of the input contains an integer TT, indicating the number of test cases. For each test case:

The first line contains two positive integers nn and mm (1n,m2×1051 \le n, m \le 2 \times 10^5), where nn indicates the length of AA and mm indicates the length of BB. Here length of an integer means the length of the string when writing the number in decimal notation without leading zeros.

The second line contains only one positive integer CC without leading zeros, indicating the result of ABA \otimes B. The length of CC is no more than 2×1052 \times 10^5.

It's guaranteed that the sum of lengths of CC over all test cases will not exceed 2×1062 \times 10^6.

输出格式

For each test case output one line.

If there exist such AA and BB that AB=CA \otimes B = C, output one line containing two integers AA and BB separated by one space. Note that AA and BB should be positive integers without leading zeros, the length of AA should be exactly nn, and the length of BB should be exactly mm.

If there are multiple valid answers, output the answer with the smallest AA; If there are still more than one answer, output one of them with the smallest BB.

If such AA and BB do not exist, print Impossible (without quotes) on a single line.

题目大意

BaoBao 现在正在他的魔法书中学习两个正整数之间的一种新的二进制运算,用 \otimes 表示。这本书告诉他,这种运算的结果是通过将两个整数中每个数字的所有多个结果串联起来计算的。

形式上讲,让第一个整数为 A=A1a2AnA=A_1a_2\dots A_n,其中 AiA_i 表示 AA 中的第 ii 位,第二个整数为 B=B1b2BmB=B_1b_2\dots B_m,其中 BiB_i 表示 BB 中的第一位。我们有

$$A \otimes B = \sum\limits_{i=1}^n\sum\limits_{j=1}^m a_ib_j = a_1b_1 + a_1b_2 + \dots + a_1b_m + a_2b_1 + \dots + a_nb_m $$

请注意,aibja_ib_j 的结果被认为是 string\textbf{string}(如果 aibj>0a_ib_j>0,则不带前导零,或者如果 aibj>0a_ib_j > 0,则仅包含一个 00),而不是正常整数。此外,这里的 sum 表示 string concatenation\textbf{string concatenation},而不是正常的加法运算。

例如,2345=810121523\otimes 45=8101215。因为 8=2×48=2\times 410=2×510=2\times 512=3×412=3\times 415=3×515=3\times 5

BaoBao 很聪明,很快就知道如何做 \otimes 的逆运算。现在,他给出了 \otimes 运算的结果以及两个原始整数中的位数。请帮助他恢复两个原始整数 AABB

输入格式

有多个测试用例。输入的第一行包含一个整数 TT,表示测试用例的数量。对于每个测试用例:

第一行包含两个正整数 nnmm1n,m2×1051\le n,m\le 2\times 10^5),其中 nn 表示 AA 的长度,mm 表示 BB 的长度。这里,整数的长度是指在不带前导零的十进制记数法中写入数字时字符串的长度。

第二行只包含一个不带前导零的正整数 CC,表示 ABA\otimes B 的结果。CC 的长度不超过 2×1052\times 10^5

保证所有测试用例的 CC 长度总和不会超过 2×1062\times 10^6

输出格式

对于每个测试用例输出一行。

如果存在这样的 AABBAB=CA\otimes B=C,则输出一行,其中包含由一个空格分隔的两个整数 AABB。请注意,AABB 应该是不带前导零的正整数,AA 的长度应该正好是 nnBB 的长度应正好是 mm

如果存在多个有效答案,则输出具有最小 AA 的答案;如果仍然有一个以上的答案,请输出其中一个最小的 BB

如果不存在这样的 AABB,请在单行上打印 Impossible(不带引号)。

4
2 2
8101215
3 4
100000001000
2 2
80101215
3 4
1000000010000
23 45
101 1000
Impossible
Impossible