#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int INF = 1000000000;
const int MOD = 1000000007;
#define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++)
#define rep(i,n) REP(i, 0, n)
const char q = '?';
int dp[51][2];//?????????n - i - 1????????§????????¨????????´????????°(j == 0 ? ??°??????????????????: ??°????????????)
int main(){
    ios::sync_with_stdio(false);
    string a, b, c;
    while(cin >> a && a != "0"){
        cin >> b >> c;
        int n = a.size();
        memset(dp, 0, sizeof(dp));
        dp[n][0] = 1;
        for(int keta = n - 1; keta >= 0; --keta){
            rep(k, 10){
                int kk = k;
                if(a[keta] != q){
                    kk = a[keta] - '0';
                    k = 9;
                }
                if(!keta && !kk) continue;
                rep(i, 10){
                    int ii = i;
                    if(b[keta] != q){
                        ii = b[keta] - '0';
                        i = 9;
                    }
                    if(!keta && !ii) continue;
                    rep(j, 10){
                        int jj = j;
                        if(c[keta] != q){
                            jj = c[keta] - '0';
                            j = 9;
                        }
                        if(!keta && !jj) continue;
                        int temp = dp[keta][0];
                        if(kk + ii == jj) dp[keta][0] += dp[keta + 1][0];
                        if(kk + ii + 1 == jj) dp[keta][0] += dp[keta + 1][1];
                        if(kk + ii - 10 == jj) dp[keta][1] += dp[keta + 1][0];
                        if(kk + ii - 9 == jj) dp[keta][1] += dp[keta + 1][1];
                        dp[keta][0] %= MOD;
                        dp[keta][1] %= MOD;
                        //if(temp < dp[keta][0]) cout << kk << ' ' << ii << ' ' << jj << endl;
                    }
                }
            }
        }
        //rep(i, n) rep(j, 2) cout << dp[i][j] << endl;
        cout << dp[0][0] << endl;
    }
    return 0;
}