#include <iostream>
#include <string>
#include <cstdlib>
#include <set>
#include <vector>
using namespace std;
struct Status {
int a[4], b[4], d[4];
int idx;
int carry;
int result;
};
char S(int x) {
return x == -1 ? 'X' : x + '0';
}
void P(const Status& s) {
return;
for (int i = 3; i >= 0; --i) {
cout << S(s.a[i]);
}
cout << "|";
for (int i = 3; i >= 0; --i) {
cout << S(s.b[i]);
}
cout << "|";
for (int i = 3; i >= 0; --i) {
cout << S(s.d[i]);
}
cout << "|#" << s.idx << " c" << s.carry << " r" << s.result << endl;
}
int solve(const Status& s) {
int idx = s.idx;
const int *a = s.a; const int *b = s.b; const int *d = s.d;
int carry = s.carry;
P(s);
if (idx == 3) {
return a[idx] + b[idx] + carry == d[idx] ? s.result : 0;
}
if (a[idx] == -1 && b[idx] == -1) {
int res = 0;
{ // Non-carry sub branch
Status s2 = s;
s2.result *= d[idx] - carry - 1;
if (s2.result < 0)
return 0;
s2.carry = 0;
s2.idx += 1;
res += solve(s2);
}
{ // Carry sub branch
Status s2 = s;
s2.result *= 9 - d[idx] - carry;
if (s2.result < 0) s2.result = 0;
s2.carry = 1;
s2.idx += 1;
res += solve(s2);
}
return res;
} else if (a[idx] == -1) {
int a1 = d[idx] - carry - b[idx];
int cc = 0;
if (a1 < 0) {
a1 += 10;
cc = 1;
}
Status s2 = s;
s2.idx += 1;
s2.carry = cc;
return solve(s2);
} else if (b[idx] == -1) {
int b1 = d[idx] - carry - a[idx];
int cc = 0;
if (b1 < 0) {
b1 += 10;
cc = 1;
}
Status s2 = s;
s2.idx += 1;
s2.carry = cc;
return solve(s2);
} else {
int sum = a[idx] + b[idx] + carry;
Status s2 = s;
if (sum >= 10) {
if (sum - 10 != d[idx])
return 0;
s2.carry = 1;
s2.idx += 1;
return solve(s2);
} else {
if (sum != d[idx])
return 0;
s2.carry = 0;
s2.idx += 1;
return solve(s2);
}
}
}
void mapp(string& s, int* targ) {
if (s.size() == 2) s = "00" + s;
if (s.size() == 3) s = "0" + s;
if (s.size() == 1) s = "000" + s;
size_t idx = 0;
for (; idx < 4; ++idx) {
if (s[3 - idx] == 'X') {
targ[idx] = -1;
} else {
targ[idx] = s[3 - idx] - '0';
}
}
}
int main() {
int n;
cin >> n;
while (n-->0) {
Status s;
string a, b, c;
cin >> a >> b >> c;
mapp(a, s.a);
mapp(b, s.b);
mapp(c, s.d);
s.idx = 0;
s.carry = 0;
s.result = 1;
P(s);
cout << solve(s) << endl;
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}