蒟蒻的自我拯救。。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
char st[100],st2[100];
int sum[100],len1,len2,ans;
int pow(int num){int tmp=1;for(int i=1;i<=num;i++){tmp*=10;}return tmp;}
bool judge()
{
int num1,num2;
num1=0;num2=0;
for(int i=1;i<=len1;i++)
{
if(st[i]!='?')num1=num1*10+st[i]-'0';
else num1=num1*10+9;
num2=num2*10+st2[i]-'0';
}
if(num1<=num2)return false;
return true;
}
int check(int pos)
{
for(int i=1;i<=pos;i++)
{
if(st[i]==st2[i]) continue;
if(st[i]<st2[i]){return -1;}
if(st[i]>st2[i]){return 1;}
}
return 0;
}
int dfs(int pos)
{
if(pos>len1)
return 0;
int tmp=0;
if(check(pos)==1)
{
return pow(sum[len1]-sum[pos]);
}
if(check(pos)==-1)
{
return 0;
}
if(st[pos+1]=='?')
{
for(int i=9;i>=0;i--)
{
st[pos+1]=i+'0';
tmp+=dfs(pos+1);
}
}
else tmp=dfs(pos+1);
return tmp;
}
int main()
{
while(scanf("%s",st+1))
{
memset(sum,0,sizeof(sum));
ans=1;
if(st[1]=='#')
break;
scanf("%s",st2+1);
len1=strlen(st+1);
len2=strlen(st2+1);
for(int i=1;i<=len1;i++)
{
sum[i]=sum[i-1];
if(st[i]=='?')
{
sum[i]++;
}
}
if(len1>len2)
{
ans=pow(sum[len1]-1);
if(st[1]=='?')
{
ans*=9;
}
else
ans*=10;
printf("%d\n",ans);
continue;
}
if(len1<len2)
{
printf("0\n");
continue;
}
if(!judge())
{
printf("0\n");
continue;
}
ans=dfs(0);
printf("%d\n",ans);
}
return 0;
}