#include <bits/stdc++.h>
using namespace std;
const long long int MOD1 = 1e9 + 7;
const long long int MOD2 = 1e9 + 6;
const long long int MAX = 100010;
long long int d[MAX];
string t[MAX];
long long int dp1[10], dp2[10], ans[MAX];
long long int power(long long int x, long long int y) {
  if (y == 0) return 1;
  long long int d = (power(x, y / 2)) % MOD1;
  if (y % 2 == 0)
    return (d * d) % MOD1;
  else
    return (((x * d) % MOD1) * d) % MOD1;
}
int main() {
  string s;
  cin >> s;
  long long int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string a;
    cin >> a;
    d[i] = int(a[0]) - '0';
    if (a.size() > 3) {
      for (int j = 3; j < a.size(); j++) {
        t[i] += a[j];
      }
    }
    if (a.size() == 3) {
      t[i] = '-';
    }
  }
  for (int i = 0; i < 10; i++) {
    dp1[i] = i;
    dp2[i] = 1;
  }
  for (int i = n - 1; i >= 0; i--) {
    int now = d[i];
    if (t[i].size() == 1 and t[i][0] == '-') {
      dp1[now] = 0;
      dp2[now] = 0;
      continue;
    }
    long long int ad = 0, d = 0;
    for (int j = t[i].size() - 1; j >= 0; j--) {
      int cur = int(t[i][j]) - '0';
      ad += ((power(10, d) * dp1[cur]) % MOD1);
      ad %= MOD1;
      d = (d + dp2[cur]) % MOD2;
    }
    dp1[now] = ad;
    dp2[now] = d;
  }
  long long int ans = 0ll;
  for (int i = 0; i < s.size(); i++) {
    int now = int(s[i]) - '0';
    ans = ans * power(10, dp2[now]) + dp1[now];
    ans %= MOD1;
  }
  cout << ans << endl;
}
