#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define re register
const int maxn = 1e5+10;
const int mx = 40;
const ll mod = 1e9+7;
const ll inf = 34359738370;
const int INF = 1e9+7;
const double pi = acos(-1.0);
char s[maxn],w[maxn];
ll dp[maxn][2][2];
int n;
int main()
{
scanf("%d %s %s",&n,s+1,w+1);
dp[0][0][0]=1;
for(int i=1;i<=n;i++)
{
if(s[i]=='?' && w[i]=='?')
{
dp[i][0][0] = dp[i-1][0][0]*10 % mod;
dp[i][0][1] = (dp[i-1][0][0]*45 % mod + dp[i-1][0][1]*55 % mod) % mod ;
dp[i][1][0] = (dp[i-1][0][0]*45 % mod + dp[i-1][1][0]*55 % mod) % mod ;
dp[i][1][1] = (dp[i-1][0][1]*45 % mod + dp[i-1][1][0]*45 % mod + dp[i-1][1][1]*100 % mod) % mod ;
}
else if(s[i]=='?' && w[i] != '?')
{
int d=w[i]-'0';
dp[i][0][0] = dp[i-1][0][0];
dp[i][0][1] = (dp[i-1][0][0]*d % mod + dp[i-1][0][1]*(d+1) % mod) % mod ;
dp[i][1][0] = (dp[i-1][0][0]*(9-d) % mod + dp[i-1][1][0]*(9-d+1) % mod) % mod ;
dp[i][1][1] = (dp[i-1][0][1]*(9-d) % mod + dp[i-1][1][0]*d % mod + dp[i-1][1][1]*10 % mod) % mod ;
}
else if(s[i]!='?' && w[i]=='?')
{
int d=s[i]-'0';
d=9-d;
dp[i][0][0] = dp[i-1][0][0];
dp[i][0][1] = (dp[i-1][0][0]*d % mod + dp[i-1][0][1]*(d+1) % mod) % mod ;
dp[i][1][0] = (dp[i-1][0][0]*(9-d) % mod + dp[i-1][1][0]*(9-d+1) % mod) % mod ;
dp[i][1][1] = (dp[i-1][0][1]*(9-d) % mod + dp[i-1][1][0]*d % mod + dp[i-1][1][1]*10 % mod) % mod ;
}
else
{
int ds=s[i]-'0',dw=w[i]-'0';
if(ds==dw)
{
dp[i][0][0]=dp[i-1][0][0];
dp[i][1][1]=dp[i-1][1][1];
dp[i][1][0]=dp[i-1][1][0];
dp[i][0][1]=dp[i-1][0][1];
}
else if(ds > dw)
{
dp[i][0][0]=0;
dp[i][1][1]=(dp[i-1][1][1]+dp[i-1][0][1]) % mod;
dp[i][0][1]=0;
dp[i][1][0]=(dp[i-1][0][0]+dp[i-1][1][0]) % mod;
}
else
{
dp[i][0][0]=0;
dp[i][1][0]=0;
dp[i][1][1]=(dp[i-1][1][1]+dp[i-1][1][0]) % mod;
dp[i][0][1]=(dp[i-1][0][0]+dp[i-1][0][1]) % mod;
}
}
}
cout<<dp[n][1][1]<<'\n';
return 0;
}
#include<bits/stdc++.h>
using namespace std;