#include<bits/stdc++.h>

using namespace std;

int nr, spcl, N, M, mod, ap[1009], ap2[109][109];
char sir[1009];
int dp[5000009];

map < pair < vector < int >, int >, int > mp;
pair < vector < int >, int > states[5000009];

void Print (pair < vector < int > , int > x)
{
    for (int i=0; i<26; i++)
        if (x.first[i] != 0) printf ("%c - %d\n", 'a' + i, x.first[i]);
    printf ("%c\n", x.second + 'a');
}

int main()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

gets (sir + 1), N = strlen (sir + 1), mod = 666013;
if (N == 1)
{
    printf ("1\n");
    return 0;
}
for (int i=1; i<=N; i++)
    sir[i] -= 'a', ap[sir[i]] ++;
scanf ("%d", &M);
while (M --)
{
    char c1, c2;
    scanf ("\n%c %c", &c1, &c2), c1 -= 'a', c2 -= 'a';
    ap2[c1][c2] = ap2[c2][c1] = 1;
}
int knt_odd = 0;
for (int i=0; i<26; i++)
    knt_odd += (ap[i] % 2 == 1);
if (knt_odd >= 2)
{
    printf ("0\n");
    return 0;
}
spcl = -1;
for (int i=0; i<26; i++)
{
    if (ap[i] & 1) spcl = i;
    ap[i] /= 2;
}
vector < int > curr;
for (int i=0; i<26; i++)
    curr.push_back (ap[i]);
for (int j=0; j<26; j++)
if (ap[j])
{
    curr[j] --;
    mp[make_pair (curr, j)] = ++nr, states[nr] = make_pair (curr, j), dp[nr] = 1;
    curr[j] ++;
}
for (int i=1; i<=nr; i++)
{
    vector < int > frq = states[i].first;
    int lst = states[i].second;
    for (int j=0; j<26; j++)
        if (frq[j] > 0 && !ap2[lst][j])
        {
            frq[j] --;
            pair < vector < int >, int > vec = make_pair (frq, j);
            frq[j] ++;
            if (!mp.count (vec)) mp[vec] = ++nr, dp[nr] = dp[i], states[nr] = vec;
            else
            {
                int id = mp[vec];
                dp[id] += dp[i];
                if (dp[id] >= mod) dp[id] -= mod;
            }
        }
}
//for (int i=1; i<=nr; i++)
  //  Print (states[i]), printf ("%d\n\n", dp[i]);
vector < int > gol;
for (int i=0; i<26; i++)
    gol.push_back (0);
int ans = 0;
for (int i=1; i<=nr; i++)
    if (states[i].first == gol && ((spcl == -1 && (!ap2[states[i].second][states[i].second])) || (spcl != -1 && (!ap2[states[i].second][spcl]))))
    {
        ans += dp[i];
        if (ans >= mod) ans -= mod;
    }
printf ("%d\n", ans);

return 0;
}