#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
char s[100005], t[100005];
struct node {
  int d;
  string s;
} a[100005];
long long v[10], wei[10], d[100005];
long long W(long long x) {
  if (x == 0) return 1LL;
  long long ans = 0;
  while (x) {
    x /= 10;
    ans++;
  }
  return ans;
}
long long quick(long long x, long long y) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = (ans * x) % mod;
    x = (x * x) % mod;
    y >>= 1;
  }
  return ans;
}
int n;
void solve() {
  scanf("%d", &n);
  getchar();
  for (int i = 1; i <= n; i++) {
    scanf("%d->", &a[i].d);
    gets(t);
    a[i].s = t;
  }
  for (int i = 0; i < 10; i++) {
    v[i] = i, wei[i] = 10LL;
  }
  for (int i = n; i >= 1; i--) {
    long long now = 0;
    long long len = (long long)a[i].s.length();
    if (len == 0) {
      v[a[i].d] = 0;
      wei[a[i].d] = 1;
      continue;
    }
    long long X = 1;
    for (long long j = 0; j < len; j++) {
      now *= wei[a[i].s[j] - '0'];
      now += v[a[i].s[j] - '0'];
      X = (X * wei[a[i].s[j] - '0']) % mod;
      now %= mod;
    }
    v[a[i].d] = now;
    wei[a[i].d] = X;
  }
  long long ans = 0;
  for (int i = 0; s[i]; i++) {
    ans *= wei[s[i] - '0'];
    ans += v[s[i] - '0'];
    ans %= mod;
  }
  cout << ans << endl;
}
int main() {
  while (gets(s)) solve();
  return 0;
}
