#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 4;
pair<long long, long long> dp[N][10];
pair<long long, string> quer[N];
long long expo(long long a, long long b) {
  if (b == 0) return 1;
  long long k = expo(a, b / 2);
  if (b & 1) {
    return (((k * k) % 1000000007) * a) % 1000000007;
  } else
    return (k * k) % 1000000007;
}
void solve() {
  string s;
  cin >> s;
  long long n;
  cin >> n;
  for (long long i = 0; i < n; ++i) {
    string t;
    cin >> t;
    long long d = t[0] - '0';
    string g = t.substr(3, (long long)t.size() - 3);
    quer[i] = make_pair(d, g);
  }
  for (long long i = 0; i < 10; ++i) {
    dp[n][i] = make_pair(1, i);
  }
  for (long long i = n - 1; i >= 0; --i) {
    string g = quer[i].second;
    long long d = quer[i].first;
    long long cur_len = 0;
    for (long long j = (long long)g.size() - 1; j >= 0; --j) {
      dp[i][d].first += dp[i + 1][g[j] - '0'].first;
      dp[i][d].first %= (1000000007 - 1);
      dp[i][d].second += dp[i + 1][g[j] - '0'].second * expo(10, cur_len);
      dp[i][d].second %= 1000000007;
      cur_len = dp[i][d].first;
    }
    for (long long j = 0; j < 10; ++j) {
      if (j != d) {
        dp[i][j] = dp[i + 1][j];
      }
    }
  }
  long long ans = 0;
  long long cur_len = 0;
  for (long long i = (long long)s.size() - 1; i >= 0; --i) {
    ans += dp[0][s[i] - '0'].second * expo(10, cur_len);
    ans %= 1000000007;
    cur_len += dp[0][s[i] - '0'].first;
    cur_len %= (1000000007 - 1);
  }
  cout << ans << '\n';
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
