#include <bits/stdc++.h>
#define N 1505
#define ll long long
#define mod 1000000007
using namespace std;
int n, m;
char s[N], c[N];
int ch[N][10], fail[N], ed[N], tot, len;
void insert() {
int now = 0;
int L = strlen(s);
for (int i = 0; i < L; ++i) {
if (!ch[now][s[i] - '0']) ch[now][s[i] - '0'] = ++tot;
now = ch[now][s[i] - '0'];
}
ed[now] = 1;
}
queue<int> q;
void build() {
for (int i = 0; i < 10; ++i)
if (ch[0][i]) q.push(ch[0][i]);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int i = 0; i < 10; ++i) {
if (ch[u][i]) {
fail[ch[u][i]] = ch[fail[u]][i], q.push(ch[u][i]),
ed[ch[u][i]] |= ed[fail[ch[u][i]]];
} else
ch[u][i] = ch[fail[u]][i];
}
}
ch[0][0] = 0;
}
ll f[N][N][2], ans;
void add(ll &x, ll y) { x = (x + y) % mod; }
int main() {
scanf("%s", c);
n = strlen(c);
scanf("%d", &m);
for (int i = 1; i <= m; ++i) scanf("%s", s), insert();
build();
f[0][0][1] = 1;
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= tot; ++j) {
if (ed[j]) continue;
for (int k = 0; k < 10; ++k) {
if (ed[ch[j][k]]) continue;
add(f[i + 1][ch[j][k]][0], f[i][j][0]);
if (k < c[i] - '0') add(f[i + 1][ch[j][k]][0], f[i][j][1]);
if (k == c[i] - '0') add(f[i + 1][ch[j][k]][1], f[i][j][1]);
}
}
}
for (int j = 0; j <= tot; ++j) {
if (ed[j]) continue;
add(ans, f[n][j][0]);
add(ans, f[n][j][1]);
}
printf("%lld\n", ans - 1);
}