#include <bits/stdc++.h>
using namespace std;
const int MAXN = 123456;
const int MAXM = 123456;
const int BASE = 1000LL * 1000 * 1000 + 7;
int n, m;
string s;
pair<int, string> req[MAXM];
long long value[MAXM][10], p10[MAXM][10];
int main() {
  ios_base::sync_with_stdio(false);
  cin >> s;
  n = s.size();
  cin >> m;
  string blank;
  getline(cin, blank);
  for (int i = (1), _b = (m); i <= _b; i++) {
    string line;
    getline(cin, line);
    req[i].first = line[0] - '0';
    req[i].second = line.substr(3, line.size() - 3);
  }
  for (int i = (0), _b = (9); i <= _b; i++) {
    value[m + 1][i] = i;
    p10[m + 1][i] = 10;
  }
  for (int i = (m), _b = (1); i >= _b; i--)
    for (int d = (0), _b = (9); d <= _b; d++) {
      if (d != req[i].first) {
        value[i][d] = value[i + 1][d];
        p10[i][d] = p10[i + 1][d];
      } else {
        p10[i][d] = 1;
        if (req[i].second.size() == 0) {
          value[i][d] = 0;
        } else {
          for (int j = (0), _b = (req[i].second.size() - 1); j <= _b; j++) {
            value[i][d] = (value[i][d] * p10[i + 1][req[i].second[j] - '0'] +
                           value[i + 1][req[i].second[j] - '0']) %
                          BASE;
            p10[i][d] = (p10[i][d] * p10[i + 1][req[i].second[j] - '0']) % BASE;
          }
        }
      }
    }
  long long res = 0;
  for (int i = (0), _b = (n - 1); i <= _b; i++)
    res = (res * p10[1][s[i] - '0'] + value[1][s[i] - '0']) % BASE;
  cout << res;
}
