Files
2023-08-03 09:22:52 +08:00

45 lines
681 B
C++

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
int can[10]={1,1,1,1,1,1,1,1,1,1},a,b;
bool change[10][10]={0},use[10]={0};
int queue[15];
int head=0,tail=0;
string num;
cin>>num;
int k;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>a>>b;
change[a][b]=1;
}
for(int i=0;i<10;i++)
{
tail=head=0;
queue[tail++]=i;
memset(use,0,sizeof(use));
use[i]=1;
while(tail-head>0)
{
for(int j=0;j<10;j++)
{
if(change[queue[head]][j]&&!use[j])
{
queue[tail++]=j;
use[j]=1;
}
}
head++;
}
can[i]=tail;
}
int ans=1;
for(int i=0;i<num.size();i++) ans*=can[num[i]-'0'];
cout<<ans<<endl;
return 0;
}