#icpc2013autumnb. [icpc2013autumn_b]Restore Calculation
[icpc2013autumn_b]Restore Calculation
题目描述
动物学校是一所为动物儿童提供教育的小学。你是这所学校的一只狐狸。
有一天,你从兔子老师花子那里得到了一个名为"Arithmetical Restorations"的问题。算术恢复是指以下类型的问题:
-
给定三个正整数 、 和 。
-
这些数字中的几个数字被擦掉了。
-
你需要在每个空白位置上分配一个数字,使得这些数字满足等式 。
-
每个数字的第一个数字不能为零,对于单个数字也是如此。
你在数学上很聪明,所以你立刻解决了这个问题。此外,你决定考虑一个更困难的问题,计算给定算术恢复问题的可能分配数量。如果你能解决这个困难的问题,你将得到一个好的成绩。
开始新任务后不久,你注意到手工列举可能的分配可能有太多了。所以,作为学校中最优秀的程序员,你现在在尝试编写一个程序来计算算术恢复问题的可能分配数量。
输入
输入由多个数据集组成。数据集的数量少于100个。每个数据集的格式如下所示。
每个数据集由三个字符串 、 和 构成。它们表示 和 的和应该是 。每个字符串由数字(0
-9
)和/或问号(?
)组成。问号(?
)表示已擦除的数字。你可以假设每个字符串的第一个字符不是 0
,并且每个数据集至少有一个问号。
保证每个字符串包含1到50个字符,包括边界。还可以假设三个字符串的长度相等。
输入的结束由一行只包含一个零表示。
输出
对于每个数据集,输出给定问题的可能分配数量模 1,000,000,007 的结果。请注意,可能无法解决给定的问题,因为花子小姐是一只粗心的兔子。
样例输入
3?4
12?
5?6
?2?4
5?7?
?9?2
?????
?????
?????
0```
#### 样例输出
```plain
2
40
200039979```
---
#### 注意
第一个数据集的答案是2。以下是它们的分配:
* 384 + 122 = 506
* 394 + 122 = 516
---
#### 题目来源
[JAG Practice Contest for ACM-ICPC Asia Regional 2013](http://acm-icpc.aitea.net/index.php?2013%2FPractice%2F%CC%CF%B5%BC%C3%CF%B6%E8%CD%BD%C1%AA)