#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
#include <numeric>
#include <vector>
#include <climits>
#include <iomanip>
#include <sstream>
#include <tuple>
#include <map>
#include <unordered_map>
#include <queue>
#include <stack>
#include <set>
#define int unsigned long long
#define endl "\n"
using namespace std;
vector<int> fa(10);
int find(int a)
{
if(a!=fa[a])fa[a]=find(fa[a]);
return fa[a];
}
void un(int a,int b)
{
int afa=find(a),bfa=find(b);
fa[bfa]=afa;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
string s;
int k;
cin>>s>>k;
iota(fa.begin(),fa.end(),0);
int x,y;
for(int i=0;i<k;++i)
{
cin>>x>>y;
un(x,y);
}
unordered_map<int,int> cnt;
unordered_map<int,int> num;
for(int i=0;i<=9;++i)
++cnt[find(i)];
for(int i=0;i<=9;++i)
num[i]=cnt[find(i)];
int ans=1;
x=static_cast<int>(s[0]-'0');
ans=num[x];
if(find(x)==find(0))
{
--ans;
}
for(int c=1;c<s.size();++c)
{
int n=static_cast<int>(s[c]-'0');
ans*=num[n];
}
cout<<ans;
return 0;
}