#include <bits/stdc++.h>
using namespace std;
void read_file(bool outToFile = true) {}
long long mod[10], len[10];
const int MAXN = 100000 + 99;
string s;
char str[MAXN];
int nq, n;
struct query {
  int d;
  string s;
} Q[MAXN];
long long pwr(long long x, long long n) {
  if (n == 0) return 1;
  if (n % 2 == 1)
    return x * pwr(x, n - 1) % (1000000007);
  else
    return pwr(x * x % (1000000007), n / 2);
}
long long calc(string &s) {
  int n = s.length();
  long long ret = 0;
  for (int i = 0; i < n; i++) {
    int d = s[i] - '0';
    ret *= pwr(10, len[d]);
    ret += mod[d];
    ret %= (1000000007);
  }
  return ret;
}
long long calcc(string &s) {
  long long ret = 0;
  for (int i = 0; i < s.length(); i++) {
    ret += len[s[i] - '0'];
    ret %= (1000000007) - 1;
  }
  return ret;
}
int main() {
  read_file();
  while (scanf("%s", str) != -1) {
    n = strlen(str);
    s = str;
    scanf("%d", &nq);
    for (int i = 0; i < nq; i++) {
      scanf("%s", str);
      Q[i].d = str[0] - '0';
      Q[i].s = str + 3;
    }
    for (int i = 0; i < 10; i++) mod[i] = i, len[i] = 1;
    for (int i = nq - 1; i >= 0; i--) {
      mod[Q[i].d] = calc(Q[i].s);
      len[Q[i].d] = calcc(Q[i].s);
    }
    long long ans = calc(s);
    printf("%lld\n", ans);
  }
}
