代码如下
#include<iostream>
using namespace std;
__int128 n,k,a[13][13],b[13],ans=1;
void dfs(int x,int y){
for(int i=0;i<=9;i++){
if(a[y][i]&&!a[x][i]){
a[x][i]=1;
dfs(x,i);
}
}
}
void write(__int128 x){
if(x==0)return;
write(x/10);
cout<<(int)(x%10);
}
__int128 read(){
char s;
__int128 x=0;
while(scanf("%c",&s)){
if(s==' '||s=='\n')return x;
x*=(__int128)10;
x+=__int128(s-'0');
//write(x);
//cout<<endl;
}
return x;
}
int main(){
n=read();
k=read();
//write(k);
//cout<<endl;
for(int i=1;i<=k;i++){
int x,y;
cin>>x>>y;
a[x][y]=1;
//cout<<(int)a[x][y]<<' ';
}
for(int i=0;i<=9;i++){
a[i][i]=1;
}
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
if(a[i][j]){
dfs(i,j);
}
}
for(int j=0;j<=9;j++){
if(a[i][j]){
b[i]++;
}
}
}
/*for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
cout<<i<<' '<<j<<' '<<(int)a[i][j];
cout<<" ";
}
cout<<endl;
}*/
do{
ans*=b[n%10];
n/=10;
}while(n);
write(ans);
cout<<endl;
return 0;
}