#icpc2013autumnb. [icpc2013autumn_b]Restore Calculation

[icpc2013autumn_b]Restore Calculation

题目描述

动物学校是一所为动物儿童提供教育的小学。你是这所学校的一只狐狸。

有一天,你从兔子老师花子那里得到了一个名为"Arithmetical Restorations"的问题。算术恢复是指以下类型的问题:

  • 给定三个正整数 AABBCC

  • 这些数字中的几个数字被擦掉了。

  • 你需要在每个空白位置上分配一个数字,使得这些数字满足等式 A+B=CA+B=C

  • 每个数字的第一个数字不能为零,对于单个数字也是如此。

你在数学上很聪明,所以你立刻解决了这个问题。此外,你决定考虑一个更困难的问题,计算给定算术恢复问题的可能分配数量。如果你能解决这个困难的问题,你将得到一个好的成绩。

开始新任务后不久,你注意到手工列举可能的分配可能有太多了。所以,作为学校中最优秀的程序员,你现在在尝试编写一个程序来计算算术恢复问题的可能分配数量。


输入

输入由多个数据集组成。数据集的数量少于100个。每个数据集的格式如下所示。

AA
BB
CC

每个数据集由三个字符串 AABBCC 构成。它们表示 AABB 的和应该是 CC。每个字符串由数字(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)