#include <bits/stdc++.h>
using namespace ::std;
uint64_t mod = 1000000007;
uint64_t power(uint64_t x, uint64_t y, uint64_t p) {
  if (y == 0) return (1 % p);
  if (y == 1) return (x % p);
  uint64_t t = power(x, y / 2, p);
  t = (t * t) % p;
  if (y % 2) t = (t * x) % p;
  return t;
}
int main() {
  string str;
  cin >> str;
  int n;
  cin >> n;
  vector<string> trans(n, "");
  for (int i = 0; i < n; i++) cin >> trans[i];
  vector<uint64_t> val(10, 0);
  vector<uint64_t> len(10, 0);
  for (int i = 0; i < 10; i++) {
    val[i] = i;
    len[i] = 1;
  }
  for (int i = n - 1; i >= 0; i--) {
    int d = trans[i][0] - '0';
    if (trans[i].size() == 3) {
      val[d] = 0;
      len[d] = 0;
      continue;
    }
    string s = trans[i].substr(3);
    uint64_t x = 0;
    uint64_t y = 0;
    for (int j = s.size() - 1; j >= 0; j--) {
      int d1 = s[j] - '0';
      y = (y + val[d1] * power(10, x, mod)) % mod;
      x = (x + len[d1]) % (mod - 1);
    }
    val[d] = y;
    len[d] = x;
  }
  uint64_t ans = 0;
  uint64_t tm = 0;
  for (int i = str.size() - 1; i >= 0; i--) {
    int d = str[i] - '0';
    ans = (ans + val[d] * power(10, tm, mod)) % mod;
    tm = (tm + len[d]) % (mod - 1);
  }
  std::cout << ans << std::endl;
  return 0;
}
