#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i, n) for(int i = 1; (i) <= (n); ++i)
#define forn(i, l, r) for(int i = (l); i <= (r); ++i)
#define ford(i, r, l) for(int i = (r); i >= (l); --i)
#define FOR(i, n) for(int i = 0; i < (n); ++i)
#define FORD(i, n) for(int i = ((n) - 1); i >= 0; --i)
#define fi first
#define se second
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define task "brentford40mu"
#define sz(a) int(a.size())
#define C(x, y) make_pair(x, y)
#define all(a) (a).begin(), (a).end()
#define bit(i, mask) (mask >> i & 1)
template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; }
inline int readInt() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();int n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;}
inline ll readLong() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();ll n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;}
inline string readString() {char c;while(c=getchar(),c==' '||c=='\n'||c=='\t');string s({c});while(c=getchar(),c!=EOF&&c!=' '&&c!='\n'&&c!='\t')s+=c;return s;}
const int N = 1e6 + 3;
const int K = 11;
const int MOD = 1e9 + 19972207;
const int G = 2521;
int n;
string s, t;
struct modular {
int value;
modular(int v = 0) {value = v; if(value < 0) value += MOD;}
modular& operator += (modular const& b) {value += b.value; if (value >= MOD) value -= MOD; return *this;}
modular& operator -= (modular const& b) {value -= b.value; if (value < 0) value += MOD; return *this;}
modular& operator *= (modular const& b) {value = 1ll * value * b.value % MOD; return *this;}
friend modular bin_pow(modular a, int y) {
modular res = 1; while (y) { if (y & 1) res *= a; a *= a; y >>= 1; }
return res;
}
friend modular inverse(modular a) { return bin_pow(a, MOD - 2); }
modular& operator/=(modular const& b) { return *this *= inverse(b); }
friend modular operator+(modular a, modular const b) { return a += b; }
friend modular operator-(modular a, modular const b) { return a -= b; }
friend modular operator-(modular const a) { return 0 - a; }
friend modular operator*(modular a, modular const b) { return a *= b; }
friend modular operator/(modular a, modular const b) { return a /= b; }
friend ostream& operator<<(std::ostream& os, modular const& a) {return os << a.value;}
friend bool operator==(modular const& a, modular const& b) {return a.value == b.value;}
friend bool operator!=(modular const& a, modular const& b) {return a.value != b.value;}
};
struct node
{
modular sum_x, sum_y, prod, cnt;
};
node dp[N][4];
int f = 0;
int get(int x, int y)
{
return (x == y) ? 0 : (x < y ? 1 : 2);
}
int get_sum(int l, int r)
{
return r * (r + 1) / 2 - l * (l - 1) / 2;
}
array<int, 4> c[11][11][3];
void solve()
{
cin >> s >> t;
n = sz(s);
forn(i, 0, 9)
forn(j, 0, 9)
{
int x = get(i, j);
forn(u, 0, 1)
forn(v, 0, 1)
{
int a = u ? 10 : i, b = v ? 10 : j;
c[a][b][x][0] += i;
c[a][b][x][1] += j;
c[a][b][x][2] += i * j;
c[a][b][x][3] += 1;
}
}
forn(i, 0, n)
{
forn(x, 0, 3)
{
if(i == 0)
{
dp[i][x] = {0, 0, 0, x == 3};
continue;
}
node &res = dp[i][x];
res = {0, 0, 0, 0};
function<void(array<int, 4>, node)> modify = [&](array<int, 4> a, node cur) {
res.sum_x += cur.sum_x * 10 * a[3] + cur.cnt * a[0];
res.sum_y += cur.sum_y * 10 * a[3] + cur.cnt * a[1];
res.prod += a[3] * 100 * cur.prod + 10 * (cur.sum_x * a[1] + cur.sum_y * a[0])
+ cur.cnt * a[2];
res.cnt += cur.cnt * a[3];
};
int u = s[i - 1] == '?' ? 10 : s[i - 1] - '0';
int v = t[i - 1] == '?' ? 10 : t[i - 1] - '0';
forn(z, 0, 2)
modify(c[u][v][z], dp[i - 1][x | z]);
}
}
cout << dp[n][0].prod;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int TC = 1;
if(fopen(task".inp", "r"))
{
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int sub = 1;
while(TC--)
{
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHJlcChpLCBuKSBmb3IoaW50IGkgPSAxOyAoaSkgPD0gKG4pOyArK2kpCiNkZWZpbmUgZm9ybihpLCBsLCByKSBmb3IoaW50IGkgPSAobCk7IGkgPD0gKHIpOyArK2kpCiNkZWZpbmUgZm9yZChpLCByLCBsKSBmb3IoaW50IGkgPSAocik7IGkgPj0gKGwpOyAtLWkpCiNkZWZpbmUgRk9SKGksIG4pIGZvcihpbnQgaSA9IDA7IGkgPCAobik7ICsraSkKI2RlZmluZSBGT1JEKGksIG4pIGZvcihpbnQgaSA9ICgobikgLSAxKTsgaSA+PSAwOyAtLWkpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBwbGwgcGFpcjxsbCwgbGw+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgdGFzayAiYnJlbnRmb3JkNDBtdSIKI2RlZmluZSBzeihhKSBpbnQoYS5zaXplKCkpCiNkZWZpbmUgQyh4LCB5KSBtYWtlX3BhaXIoeCwgeSkKI2RlZmluZSBhbGwoYSkgKGEpLmJlZ2luKCksIChhKS5lbmQoKQojZGVmaW5lIGJpdChpLCBtYXNrKSAobWFzayA+PiBpICYgMSkKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbWF4aW1pemUoVCAmcmVzLCBjb25zdCBUICZ2YWwpIHsgaWYgKHJlcyA8IHZhbCl7IHJlcyA9IHZhbDsgcmV0dXJuIHRydWU7IH07IHJldHVybiBmYWxzZTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIG1pbmltaXplKFQgJnJlcywgY29uc3QgVCAmdmFsKSB7IGlmIChyZXMgPiB2YWwpeyByZXMgPSB2YWw7IHJldHVybiB0cnVlOyB9OyByZXR1cm4gZmFsc2U7IH0KCmlubGluZSBpbnQgcmVhZEludCgpICAgICAgIHtjaGFyIGM7d2hpbGUoYz1nZXRjaGFyKCksYyE9Jy0nJiYoYzwnMCd8fGM+JzknKSk7Ym9vbCBzaWduPShjPT0nLScpO2lmKHNpZ24pYz1nZXRjaGFyKCk7aW50IG49Yy0nMCc7d2hpbGUoYz1nZXRjaGFyKCksYz49JzAnJiZjPD0nOScpbj0xMCpuK2MtJzAnO3JldHVybighc2lnbik/bjotbjt9CmlubGluZSBsbCByZWFkTG9uZygpICAgICAgIHtjaGFyIGM7d2hpbGUoYz1nZXRjaGFyKCksYyE9Jy0nJiYoYzwnMCd8fGM+JzknKSk7Ym9vbCBzaWduPShjPT0nLScpO2lmKHNpZ24pYz1nZXRjaGFyKCk7bGwgIG49Yy0nMCc7d2hpbGUoYz1nZXRjaGFyKCksYz49JzAnJiZjPD0nOScpbj0xMCpuK2MtJzAnO3JldHVybighc2lnbik/bjotbjt9CmlubGluZSBzdHJpbmcgcmVhZFN0cmluZygpIHtjaGFyIGM7d2hpbGUoYz1nZXRjaGFyKCksYz09JyAnfHxjPT0nXG4nfHxjPT0nXHQnKTtzdHJpbmcgcyh7Y30pO3doaWxlKGM9Z2V0Y2hhcigpLGMhPUVPRiYmYyE9JyAnJiZjIT0nXG4nJiZjIT0nXHQnKXMrPWM7cmV0dXJuIHM7fQoKCmNvbnN0IGludCBOID0gMWU2ICsgMzsKY29uc3QgaW50IEsgPSAxMTsKY29uc3QgaW50IE1PRCA9IDFlOSArIDE5OTcyMjA3Owpjb25zdCBpbnQgRyA9IDI1MjE7CgoKCmludCBuOwoKc3RyaW5nIHMsIHQ7CgpzdHJ1Y3QgbW9kdWxhciB7CiAgaW50IHZhbHVlOwoKICBtb2R1bGFyKGludCB2ID0gMCkge3ZhbHVlID0gdjsgaWYodmFsdWUgPCAwKSB2YWx1ZSArPSBNT0Q7fQoKICBtb2R1bGFyJiBvcGVyYXRvciArPSAobW9kdWxhciBjb25zdCYgYikge3ZhbHVlICs9IGIudmFsdWU7IGlmICh2YWx1ZSA+PSBNT0QpIHZhbHVlIC09IE1PRDsgcmV0dXJuICp0aGlzO30KICBtb2R1bGFyJiBvcGVyYXRvciAtPSAobW9kdWxhciBjb25zdCYgYikge3ZhbHVlIC09IGIudmFsdWU7IGlmICh2YWx1ZSA8IDApIHZhbHVlICs9IE1PRDsgcmV0dXJuICp0aGlzO30KICBtb2R1bGFyJiBvcGVyYXRvciAqPSAobW9kdWxhciBjb25zdCYgYikge3ZhbHVlID0gMWxsICogdmFsdWUgKiBiLnZhbHVlICUgTU9EOyByZXR1cm4gKnRoaXM7fQoKICBmcmllbmQgbW9kdWxhciBiaW5fcG93KG1vZHVsYXIgYSwgaW50IHkpIHsKICAgIG1vZHVsYXIgcmVzID0gMTsgd2hpbGUgKHkpIHsgaWYgKHkgJiAxKSByZXMgKj0gYTsgYSAqPSBhOyB5ID4+PSAxOyB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmcmllbmQgbW9kdWxhciBpbnZlcnNlKG1vZHVsYXIgYSkgeyByZXR1cm4gYmluX3BvdyhhLCBNT0QgLSAyKTsgfQoKICBtb2R1bGFyJiBvcGVyYXRvci89KG1vZHVsYXIgY29uc3QmIGIpIHsgcmV0dXJuICp0aGlzICo9IGludmVyc2UoYik7IH0KICBmcmllbmQgbW9kdWxhciBvcGVyYXRvcisobW9kdWxhciBhLCBtb2R1bGFyIGNvbnN0IGIpIHsgcmV0dXJuIGEgKz0gYjsgfQogIGZyaWVuZCBtb2R1bGFyIG9wZXJhdG9yLShtb2R1bGFyIGEsIG1vZHVsYXIgY29uc3QgYikgeyByZXR1cm4gYSAtPSBiOyB9CiAgZnJpZW5kIG1vZHVsYXIgb3BlcmF0b3ItKG1vZHVsYXIgY29uc3QgYSkgeyByZXR1cm4gMCAtIGE7IH0KICBmcmllbmQgbW9kdWxhciBvcGVyYXRvcioobW9kdWxhciBhLCBtb2R1bGFyIGNvbnN0IGIpIHsgcmV0dXJuIGEgKj0gYjsgfQogIGZyaWVuZCBtb2R1bGFyIG9wZXJhdG9yLyhtb2R1bGFyIGEsIG1vZHVsYXIgY29uc3QgYikgeyByZXR1cm4gYSAvPSBiOyB9CiAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgbW9kdWxhciBjb25zdCYgYSkge3JldHVybiBvcyA8PCBhLnZhbHVlO30KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KG1vZHVsYXIgY29uc3QmIGEsIG1vZHVsYXIgY29uc3QmIGIpIHtyZXR1cm4gYS52YWx1ZSA9PSBiLnZhbHVlO30KICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KG1vZHVsYXIgY29uc3QmIGEsIG1vZHVsYXIgY29uc3QmIGIpIHtyZXR1cm4gYS52YWx1ZSAhPSBiLnZhbHVlO30KfTsKCgpzdHJ1Y3Qgbm9kZQp7CiAgICBtb2R1bGFyIHN1bV94LCBzdW1feSwgcHJvZCwgY250Owp9OwoKbm9kZSBkcFtOXVs0XTsKCmludCBmID0gMDsKaW50IGdldChpbnQgeCwgaW50IHkpCnsKICAgIHJldHVybiAoeCA9PSB5KSA/IDAgOiAoeCA8IHkgPyAxIDogMik7Cn0KCmludCBnZXRfc3VtKGludCBsLCBpbnQgIHIpCnsKICAgIHJldHVybiByICogKHIgKyAxKSAvIDIgLSBsICogKGwgLSAxKSAvIDI7Cn0KCmFycmF5PGludCwgND4gY1sxMV1bMTFdWzNdOwoKCnZvaWQgc29sdmUoKQp7CiAgICBjaW4gPj4gcyA+PiB0OwogICAgbiA9IHN6KHMpOwoKICAgIGZvcm4oaSwgMCwgOSkKICAgICAgICBmb3JuKGosIDAsIDkpCiAgICAgICAgewogICAgICAgICAgICBpbnQgeCA9IGdldChpLCBqKTsKICAgICAgICAgICAgZm9ybih1LCAwLCAxKQogICAgICAgICAgICAgICAgZm9ybih2LCAwLCAxKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGludCBhID0gdSA/IDEwIDogaSwgYiA9IHYgPyAxMCA6IGo7CiAgICAgICAgICAgICAgICAgICAgY1thXVtiXVt4XVswXSArPSBpOwogICAgICAgICAgICAgICAgICAgIGNbYV1bYl1beF1bMV0gKz0gajsKICAgICAgICAgICAgICAgICAgICBjW2FdW2JdW3hdWzJdICs9IGkgKiBqOwogICAgICAgICAgICAgICAgICAgIGNbYV1bYl1beF1bM10gKz0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgIGZvcm4oaSwgMCwgbikKICAgIHsKICAgICAgICBmb3JuKHgsIDAsIDMpCiAgICAgICAgewogICAgICAgICAgICBpZihpID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRwW2ldW3hdID0gezAsIDAsIDAsIHggPT0gM307CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbm9kZSAmcmVzID0gZHBbaV1beF07CgogICAgICAgICAgICByZXMgPSB7MCwgMCwgMCwgMH07CgogICAgICAgICAgICBmdW5jdGlvbjx2b2lkKGFycmF5PGludCwgND4sIG5vZGUpPiBtb2RpZnkgPSBbJl0oYXJyYXk8aW50LCA0PiBhLCBub2RlIGN1cikgewogICAgICAgICAgICAgICAgcmVzLnN1bV94ICs9IGN1ci5zdW1feCAqIDEwICogYVszXSArIGN1ci5jbnQgKiBhWzBdOwogICAgICAgICAgICAgICAgcmVzLnN1bV95ICs9IGN1ci5zdW1feSAqIDEwICogYVszXSArIGN1ci5jbnQgKiBhWzFdOwogICAgICAgICAgICAgICAgcmVzLnByb2QgKz0gYVszXSAqIDEwMCAqIGN1ci5wcm9kICsgMTAgKiAoY3VyLnN1bV94ICogYVsxXSArIGN1ci5zdW1feSAqIGFbMF0pCiAgICAgICAgICAgICAgICAgICAgICAgICsgY3VyLmNudCAqIGFbMl07CiAgICAgICAgICAgICAgICByZXMuY250ICs9IGN1ci5jbnQgKiBhWzNdOwoKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGludCB1ID0gc1tpIC0gMV0gPT0gJz8nID8gMTAgOiBzW2kgLSAxXSAtICcwJzsKICAgICAgICAgICAgaW50IHYgPSB0W2kgLSAxXSA9PSAnPycgPyAxMCA6IHRbaSAtIDFdIC0gJzAnOwoKICAgICAgICAgICAgZm9ybih6LCAwLCAyKQogICAgICAgICAgICAgICAgbW9kaWZ5KGNbdV1bdl1bel0sIGRwW2kgLSAxXVt4IHwgel0pOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgZHBbbl1bMF0ucHJvZDsKfQoKc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpbnQgVEMgPSAxOwoKICAgIGlmKGZvcGVuKHRhc2siLmlucCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgc3ViID0gMTsKCgogICAgd2hpbGUoVEMtLSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==