#include <bits/stdc++.h>
using namespace std;
struct rule {
  long long value;
  long long degree;
};
struct preRule {
  long long digit;
  string s;
};
vector<preRule> rules;
vector<rule> curRule;
string s;
string f;
long long powmod(long long base, long long exp, long long mod) {
  if (exp == 0) return 1;
  if (exp % 2 == 0) {
    long long k = powmod(base, (exp / 2), mod);
    return (k * k) % mod;
  } else {
    return (base * powmod(base, (exp - 1), mod)) % mod;
  }
}
int main() {
  cin >> s;
  long long n;
  cin >> n;
  rules.resize(n);
  curRule.resize(10);
  for (int i = 0; i < 10; ++i) {
    curRule[i].value = i;
    curRule[i].degree = 1;
  }
  for (int i = 0; i < n; ++i) {
    cin >> f;
    long long digit = f[0] - '0';
    f = f.substr(3);
    rules[i].digit = digit;
    rules[i].s = f;
  }
  for (int i = n - 1; i >= 0; --i) {
    long long d = rules[i].digit;
    f = rules[i].s;
    long long curDegree = 0;
    long long len = f.size();
    long long res = 0;
    for (int j = len - 1; j >= 0; --j) {
      long long dig = f[j] - '0';
      res = (res + (curRule[dig].value * powmod(10, curDegree, 1000000007))) %
            1000000007;
      curDegree = (curDegree + curRule[dig].degree) % (1000000007 - 1);
    }
    curRule[d].value = res;
    curRule[d].degree = curDegree;
  }
  long long length = s.size();
  long long result = 0;
  long long cD = 0;
  for (int i = length - 1; i >= 0; --i) {
    long long dig = s[i] - '0';
    result = (result + (curRule[dig].value * powmod(10, cD, 1000000007))) %
             1000000007;
    cD = (cD + curRule[dig].degree) % (1000000007 - 1);
    result %= 1000000007;
  }
  cout << result << endl;
  return 0;
}
