显示代码纯文本
#include <stdio.h>
#include <string.h>
char a[35];
int b[10][10],n[10],j,k,x,y;
int num[40],head,l;
void come(int x)
{
int i;
for(i=head;i<=39;i++)
num[i]*=x;
i=39;
while(num[i]||i>=head)
{
num[i-1]+=num[i]/10;
num[i]%=10;
i--;
}
head=i+1;
}
int main()
{
int i;
freopen("build.in","r",stdin);
freopen("build.out","w",stdout);
scanf("%s%d",a,&k);
memset(b,0,sizeof(b));
for(i=1;i<=k;i++)
{
scanf("%d%d",&x,&y);
b[x][y]=1;
}
for(i=0;i<10;i++)
b[i][i]=1;
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{
if(b[j][i]&&b[i][k])
b[j][k]=1;
}
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)
if(b[i][j])
n[i]++;
num[39]=1;
head=39;
l=strlen(a);
for(i=0;i<l;i++)
come(n[a[i]-'0']);
for(i=head;i<=39;i++)
printf("%d",num[i]);
return 0;
}